Centralize JPEG compression (also in MainViewModel)

This commit is contained in:
Pierre-Yves Nicolas
2026-03-22 18:28:17 +01:00
parent a9edfa2b87
commit ceceaf8792

View File

@@ -33,7 +33,10 @@ import org.fairscan.app.domain.PageViewKey
import org.fairscan.app.ui.NavigationState import org.fairscan.app.ui.NavigationState
import org.fairscan.app.ui.Screen import org.fairscan.app.ui.Screen
import org.fairscan.app.ui.state.DocumentUiModel import org.fairscan.app.ui.state.DocumentUiModel
import java.io.ByteArrayOutputStream import org.fairscan.imageprocessing.encodeJpeg
import org.opencv.android.Utils
import org.opencv.core.Mat
import org.opencv.imgproc.Imgproc
class MainViewModel(val imageRepository: ImageRepository, launchMode: LaunchMode): ViewModel() { class MainViewModel(val imageRepository: ImageRepository, launchMode: LaunchMode): ViewModel() {
@@ -115,8 +118,15 @@ class MainViewModel(val imageRepository: ImageRepository, launchMode: LaunchMode
} }
private fun compressJpeg(bitmap: Bitmap, quality: Int): ByteArray { private fun compressJpeg(bitmap: Bitmap, quality: Int): ByteArray {
val outputStream = ByteArrayOutputStream() val rgba = Mat()
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream) Utils.bitmapToMat(bitmap, rgba)
return outputStream.toByteArray() val bgr = Mat()
Imgproc.cvtColor(rgba, bgr, Imgproc.COLOR_RGBA2BGR)
rgba.release()
return try {
encodeJpeg(bgr, quality)
} finally {
bgr.release()
}
} }
} }