ReImplement imageSearch max size restrict

This commit is contained in:
tarsin committed 2023-01-30 15:06:22 +08:00
1 parent d7f050efc4
commit 7a03fb53ea
3 files changed
+23 -7

No files matched your search

@@ -70,6 +70,7 @@ import com.hippo.ehviewer.ui.scene.GalleryDetailScene
import com.hippo.ehviewer.ui.scene.GalleryListScene
import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs
import com.hippo.ehviewer.ui.scene.ProgressScene
import com.hippo.image.Image
import com.hippo.util.addTextToClipboard
import com.hippo.util.getClipboardManager
import com.hippo.util.getUrlFromClipboard
@@ -91,7 +92,7 @@ class MainActivity : EhActivity() {
private fun saveImageToTempFile(uri: Uri): File? {
val src = ImageDecoder.createSource(contentResolver, uri)
val bitmap = runCatching { ImageDecoder.decodeBitmap(src) }.getOrNull() ?: return null
val bitmap = runCatching { ImageDecoder.decodeBitmap(src, Image.imageSearchDecoderSampleListener) }.getOrNull() ?: return null
val temp = AppConfig.createTempFile() ?: return null
var os: OutputStream? = null
return try {
@@ -37,6 +37,7 @@ import com.hippo.ehviewer.AppConfig;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.client.data.ListUrlBuilder;
import com.hippo.ehviewer.client.exception.EhException;
import com.hippo.image.Image;
import com.hippo.unifile.UniFile;
import com.hippo.yorozuya.IOUtils;
import com.hippo.yorozuya.ViewUtils;
@@ -121,8 +122,7 @@ public final class ImageSearchLayout extends LinearLayout implements View.OnClic
try {
var src = ImageDecoder.createSource(context.getContentResolver(), imageUri);
Bitmap bitmap = ImageDecoder.decodeBitmap(src, ((imageDecoder, imageInfo, source) -> {
}));
Bitmap bitmap = ImageDecoder.decodeBitmap(src, Image.getImageSearchDecoderSampleListener());
if (null == bitmap) {
return;
}
+19 -4
View File
@@ -26,6 +26,7 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Build
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.R
import java.nio.ByteBuffer
import kotlin.math.min
@@ -38,10 +39,7 @@ class Image private constructor(source: Source, private var src: ByteBufferSourc
}
decoder.setTargetColorSpace(colorSpace)
decoder.setTargetSampleSize(
min(
info.size.width / (2 * screenWidth),
info.size.height / (2 * screenHeight)
).coerceAtLeast(1)
calculateSampleSize(info, 2 * screenHeight, 2 * screenWidth)
)
}.also {
(it as? BitmapDrawable)?.run {
@@ -65,6 +63,23 @@ class Image private constructor(source: Source, private var src: ByteBufferSourc
}
companion object {
fun calculateSampleSize(info: ImageInfo, targetHeight: Int, targetWeight: Int): Int {
return min(
info.size.width / targetWeight,
info.size.height / targetHeight
).coerceAtLeast(1)
}
private val imageSearchMaxSize =
EhApplication.application.resources.getDimensionPixelOffset(R.dimen.image_search_max_size)
@JvmStatic
val imageSearchDecoderSampleListener =
ImageDecoder.OnHeaderDecodedListener { decoder, info, _ ->
decoder.setTargetSampleSize(
calculateSampleSize(info, imageSearchMaxSize, imageSearchMaxSize)
)
}
val screenWidth = EhApplication.application.resources.displayMetrics.widthPixels
val screenHeight = EhApplication.application.resources.displayMetrics.heightPixels
val isWideColorGamut =