Resize the captured image before displaying it

This commit is contained in:
Pierre-Yves Nicolas
2025-06-25 20:58:18 +02:00
parent d025384f39
commit 802bf20f08
3 changed files with 19 additions and 16 deletions

View File

@@ -96,8 +96,25 @@ fun extractDocument(originalBitmap: Bitmap, quad: Quad, rotationDegrees: Int): B
Imgproc.warpPerspective(inputMat, outputMat, transform, outputSize) Imgproc.warpPerspective(inputMat, outputMat, transform, outputSize)
val enhanced = enhanceCapturedImage(outputMat) val enhanced = enhanceCapturedImage(outputMat)
val rotated = rotate(enhanced, rotationDegrees)
val resized = resize(rotated, 1500.0)
return toBitmap(rotate(enhanced, rotationDegrees)) return toBitmap(resized)
}
fun resize(original: Mat, targetMax: Double): Mat {
val origSize = original.size()
if (max(origSize.width, origSize.height) < targetMax)
return original;
var targetWidth = targetMax
var targetHeight = origSize.height * targetWidth / origSize.width
if (origSize.width < origSize.height) {
targetHeight = targetMax
targetWidth = origSize.width * targetHeight / origSize.height
}
val result = Mat()
Imgproc.resize(original, result, Size(targetWidth, targetHeight), 0.0, 0.0, Imgproc.INTER_AREA)
return result
} }
fun rotate(input: Mat, degrees: Int): Mat { fun rotate(input: Mat, degrees: Int): Mat {

View File

@@ -150,9 +150,8 @@ class MainViewModel(
if (bitmap == null) { if (bitmap == null) {
return return
} }
val resized = resizeImage(bitmap)
val outputStream = ByteArrayOutputStream() val outputStream = ByteArrayOutputStream()
resized.compress(Bitmap.CompressFormat.JPEG, quality, outputStream) bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream)
val jpegBytes = outputStream.toByteArray() val jpegBytes = outputStream.toByteArray()
imageRepository.add(jpegBytes) imageRepository.add(jpegBytes)
_pageIds.value = imageRepository.imageIds() _pageIds.value = imageRepository.imageIds()

View File

@@ -38,16 +38,3 @@ fun writePdfFromJpegs(jpegs: Sequence<ByteArray>, outputStream: OutputStream) {
document.save(outputStream) document.save(outputStream)
} }
} }
fun resizeImage(original: Bitmap): Bitmap {
val targetMax = 1500
if (max(original.width, original.height) < targetMax)
return original;
var targetWidth = targetMax
var targetHeight = original.height * targetWidth / original.width
if (original.width < original.height) {
targetHeight = targetMax
targetWidth = original.width * targetHeight / original.height
}
return original.scale(targetWidth, targetHeight)
}