From c778bd6e9eb380e63701c1c2b6fff9adbcbaa801 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 27 Jan 2024 22:24:21 +0100 Subject: [PATCH] fixed decoding TIFF to specific size for conversion --- CHANGELOG.md | 1 + .../deckers/thibault/aves/decoder/TiffGlideModule.kt | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f0f24b4c..8e1d814ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ All notable changes to this project will be documented in this file. - crash when loading some large DNG in viewer - searching from drawer on mobile +- resizing TIFF during conversion ## [v1.10.2] - 2023-12-24 diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/decoder/TiffGlideModule.kt b/android/app/src/main/kotlin/deckers/thibault/aves/decoder/TiffGlideModule.kt index 20ad40cb5..4160bfd6e 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/decoder/TiffGlideModule.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/decoder/TiffGlideModule.kt @@ -48,7 +48,8 @@ internal class TiffFetcher(val model: TiffImage, val width: Int, val height: Int val page = model.page ?: 0 var sampleSize = 1 - if (width > 0 && height > 0) { + val customSize = width > 0 && height > 0 + if (customSize) { // determine sample size val fd = context.contentResolver.openFileDescriptor(uri, "r")?.detachFd() if (fd == null) { @@ -63,7 +64,7 @@ internal class TiffFetcher(val model: TiffImage, val width: Int, val height: Int val imageWidth = options.outWidth val imageHeight = options.outHeight if (imageHeight > height || imageWidth > width) { - while (imageHeight / (sampleSize * 2) > height && imageWidth / (sampleSize * 2) > width) { + while (imageHeight / (sampleSize * 2) >= height && imageWidth / (sampleSize * 2) >= width) { sampleSize *= 2 } } @@ -84,6 +85,8 @@ internal class TiffFetcher(val model: TiffImage, val width: Int, val height: Int val bitmap = TiffBitmapFactory.decodeFileDescriptor(fd, options) if (bitmap == null) { callback.onLoadFailed(Exception("Decoding full TIFF yielded null bitmap")) + } else if (customSize) { + callback.onDataReady(Bitmap.createScaledBitmap(bitmap, width, height, true)) } else { callback.onDataReady(bitmap) }