#352 higher quality thumbnails

This commit is contained in:
Thibault Deckers 2022-11-09 19:55:02 +01:00
parent e76e49a54b
commit d224edfbcb
6 changed files with 12 additions and 5 deletions

View file

@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file.
### Changed
- higher quality thumbnails
- upgraded Flutter to stable v3.3.7
### Fixed

View file

@ -19,10 +19,10 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.load.DecodeFormat
import com.bumptech.glide.request.RequestOptions
import deckers.thibault.aves.MainActivity
import deckers.thibault.aves.MainActivity.Companion.EXTRA_STRING_ARRAY_SEPARATOR
import deckers.thibault.aves.MainActivity.Companion.EXTRA_KEY_FILTERS_ARRAY
import deckers.thibault.aves.MainActivity.Companion.EXTRA_KEY_FILTERS_STRING
import deckers.thibault.aves.MainActivity.Companion.EXTRA_KEY_PAGE
import deckers.thibault.aves.MainActivity.Companion.EXTRA_STRING_ARRAY_SEPARATOR
import deckers.thibault.aves.R
import deckers.thibault.aves.channel.calls.Coresult.Companion.safe
import deckers.thibault.aves.channel.calls.Coresult.Companion.safeSuspend
@ -159,7 +159,7 @@ class AppAdapterHandler(private val context: Context) : MethodCallHandler {
.build()
val options = RequestOptions()
.format(DecodeFormat.PREFER_RGB_565)
.format(DecodeFormat.PREFER_ARGB_8888)
.override(size, size)
val target = Glide.with(context)
.asBitmap()

View file

@ -42,8 +42,9 @@ class MediaFetchBytesHandler(private val context: Context) : MethodCallHandler {
val heightDip = call.argument<Number>("heightDip")?.toDouble()
val pageId = call.argument<Int>("pageId")
val defaultSizeDip = call.argument<Number>("defaultSizeDip")?.toDouble()
val quality = call.argument<Int>("quality")
if (uri == null || mimeType == null || dateModifiedSecs == null || rotationDegrees == null || isFlipped == null || widthDip == null || heightDip == null || defaultSizeDip == null) {
if (uri == null || mimeType == null || dateModifiedSecs == null || rotationDegrees == null || isFlipped == null || widthDip == null || heightDip == null || defaultSizeDip == null || quality == null) {
result.error("getThumbnail-args", "missing arguments", null)
return
}
@ -60,6 +61,7 @@ class MediaFetchBytesHandler(private val context: Context) : MethodCallHandler {
height = (heightDip * density).roundToInt(),
pageId = pageId,
defaultSize = (defaultSizeDip * density).roundToInt(),
quality = quality,
result = result,
).fetch()
}

View file

@ -39,6 +39,7 @@ class ThumbnailFetcher internal constructor(
height: Int?,
private val pageId: Int?,
private val defaultSize: Int,
private val quality: Int,
private val result: MethodChannel.Result,
) {
private val uri: Uri = Uri.parse(uri)
@ -79,7 +80,7 @@ class ThumbnailFetcher internal constructor(
}
if (bitmap != null) {
result.success(bitmap.getBytes(MimeTypes.canHaveAlpha(mimeType), recycle = false))
result.success(bitmap.getBytes(MimeTypes.canHaveAlpha(mimeType), recycle = false, quality = quality))
} else {
var errorDetails: String? = exception?.message
if (errorDetails?.isNotEmpty() == true) {
@ -119,7 +120,7 @@ class ThumbnailFetcher internal constructor(
private fun getByGlide(): Bitmap? {
// add signature to ignore cache for images which got modified but kept the same URI
var options = RequestOptions()
.format(DecodeFormat.PREFER_RGB_565)
.format(if (quality == 100) DecodeFormat.PREFER_ARGB_8888 else DecodeFormat.PREFER_RGB_565)
.signature(ObjectKey("$dateModifiedSecs-$rotationDegrees-$isFlipped-$width-$pageId"))
.override(width, height)

View file

@ -227,6 +227,7 @@ class PlatformMediaFetchService implements MediaFetchService {
'heightDip': extent,
'pageId': pageId,
'defaultSizeDip': _thumbnailDefaultSize,
'quality': 100,
});
if (result != null) return result as Uint8List;
} on PlatformException catch (e, stack) {

View file

@ -3,6 +3,7 @@ import 'dart:io';
import 'package:aves/app_flavor.dart';
import 'package:aves/flutter_version.dart';
import 'package:aves/model/device.dart';
import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/ref/mime_types.dart';
@ -149,6 +150,7 @@ class _BugReportState extends State<BugReport> with FeedbackMixin {
'Android version: ${androidInfo.version.release} (SDK ${androidInfo.version.sdkInt})',
'Android build: ${androidInfo.display}',
'Device: ${androidInfo.manufacturer} ${androidInfo.model}',
'Geocoder: ${device.hasGeocoder ? 'ready' : 'not available'}',
'Mobile services: ${mobileServices.isServiceAvailable ? 'ready' : 'not available'}',
'System locales: ${WidgetsBinding.instance.window.locales.join(', ')}',
'Aves locale: ${settings.locale ?? 'system'} -> ${settings.appliedLocale}',