minor fixes

This commit is contained in:
Thibault Deckers 2020-04-21 14:11:07 +09:00
parent cfd5051c69
commit 6b299f6c86
2 changed files with 24 additions and 18 deletions

View file

@ -103,24 +103,30 @@ public class ImageFileHandler implements MethodChannel.MethodCallHandler {
Glide.with(activity).clear(target); Glide.with(activity).clear(target);
} else { } else {
ContentResolver cr = activity.getContentResolver(); ContentResolver cr = activity.getContentResolver();
try (InputStream is = cr.openInputStream(uri)) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && (MimeTypes.HEIC.equals(mimeType) || MimeTypes.HEIF.equals(mimeType))) {
if (is != null) { // as of Flutter v1.15.17, Dart Image.memory cannot decode HEIF/HEIC images
data = getBytes(is); // so we convert the image using Android native decoder
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && (MimeTypes.HEIC.equals(mimeType) || MimeTypes.HEIF.equals(mimeType))) { try {
// as of Flutter v1.15.17, Dart Image.memory cannot decode HEIF/HEIC images ImageDecoder.Source source = ImageDecoder.createSource(cr, uri);
// so we convert the image using Android native decoder Bitmap bitmap = ImageDecoder.decodeBitmap(source);
ImageDecoder.Source source = ImageDecoder.createSource(cr, uri); ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap bitmap = ImageDecoder.decodeBitmap(source); // we compress the bitmap because Dart Image.memory cannot decode the raw bytes
ByteArrayOutputStream stream = new ByteArrayOutputStream(); // Bitmap.CompressFormat.PNG is slower than JPEG
// we compress the bitmap because Dart Image.memory cannot decode the raw bytes bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
// Bitmap.CompressFormat.PNG is slower than JPEG data = stream.toByteArray();
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream); } catch (IOException e) {
data = stream.toByteArray(); result.error("getImage-decode-exception", "failed to decode image from uri=" + uri, e.getMessage());
} return;
}
} else {
try (InputStream is = cr.openInputStream(uri)) {
if (is != null) {
data = getBytes(is);
}
} catch (IOException e) {
result.error("getImage-read-exception", "failed to get image from uri=" + uri, e.getMessage());
return;
} }
} catch (IOException e) {
result.error("getImage-image-exception", "failed to get image from uri=" + uri, e.getMessage());
return;
} }
} }

View file

@ -56,7 +56,7 @@ class AvesVideoState extends State<AvesVideo> {
..clear(); ..clear();
} }
bool isPlayable(IjkStatus status) => [IjkStatus.prepared, IjkStatus.playing, IjkStatus.pause, IjkStatus.complete].contains(status); bool isPlayable(IjkStatus status) => controller != null && [IjkStatus.prepared, IjkStatus.playing, IjkStatus.pause, IjkStatus.complete].contains(status);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {