From 802bf20f08420835c78244deba193e590bcd50de Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Wed, 25 Jun 2025 20:58:18 +0200 Subject: [PATCH] Resize the captured image before displaying it --- .../org/mydomain/myscan/DocumentDetection.kt | 19 ++++++++++++++++++- .../java/org/mydomain/myscan/MainViewModel.kt | 3 +-- .../java/org/mydomain/myscan/PdfGeneration.kt | 13 ------------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/mydomain/myscan/DocumentDetection.kt b/app/src/main/java/org/mydomain/myscan/DocumentDetection.kt index 229660a..3962389 100644 --- a/app/src/main/java/org/mydomain/myscan/DocumentDetection.kt +++ b/app/src/main/java/org/mydomain/myscan/DocumentDetection.kt @@ -96,8 +96,25 @@ fun extractDocument(originalBitmap: Bitmap, quad: Quad, rotationDegrees: Int): B Imgproc.warpPerspective(inputMat, outputMat, transform, outputSize) 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 { diff --git a/app/src/main/java/org/mydomain/myscan/MainViewModel.kt b/app/src/main/java/org/mydomain/myscan/MainViewModel.kt index 4e1eca1..4615a9f 100644 --- a/app/src/main/java/org/mydomain/myscan/MainViewModel.kt +++ b/app/src/main/java/org/mydomain/myscan/MainViewModel.kt @@ -150,9 +150,8 @@ class MainViewModel( if (bitmap == null) { return } - val resized = resizeImage(bitmap) val outputStream = ByteArrayOutputStream() - resized.compress(Bitmap.CompressFormat.JPEG, quality, outputStream) + bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream) val jpegBytes = outputStream.toByteArray() imageRepository.add(jpegBytes) _pageIds.value = imageRepository.imageIds() diff --git a/app/src/main/java/org/mydomain/myscan/PdfGeneration.kt b/app/src/main/java/org/mydomain/myscan/PdfGeneration.kt index 0b205cc..6ff6ccf 100644 --- a/app/src/main/java/org/mydomain/myscan/PdfGeneration.kt +++ b/app/src/main/java/org/mydomain/myscan/PdfGeneration.kt @@ -38,16 +38,3 @@ fun writePdfFromJpegs(jpegs: Sequence, outputStream: 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) -}