Я пытаюсь взять изображение актива, изменить его размер до произвольной ширины и высоты и преобразовать изображение в изображение dart ui, чтобы я мог нарисовать изображение на холсте, используя drawImage метод. Это позволяет настроить изображение для экрана разных размеров.
Однако я столкнулся с проблемой изменения размера изображения. Я пробовал несколько разных подходов, но лучшее, что мне удалось, - это нарисовать правильные данные изображения с обрезанным, а не с измененным размером изображения, недействительными данные (неправильное декодирование c) с правильным размером или правильное изображение данные при невозможности изменить размер изображения.
Мои именованные операции импорта:
import 'dart:io' as io;
import 'dart:ui' as ui;
import 'package:flutter/widgets.dart' as widgets;
import 'package:image/image.dart' as image;
Некоторые из моих попыток заключаются в следующем:
Отображение правильных данных изображения при невозможности регулировки размер:
Future<ui.Image> loadUiImage(String imageAssetPath) async {
widgets.Image widgetsImage = widgets.Image.asset(imageAssetPath, scale: 0.5);
Completer<ui.Image> completer = Completer<ui.Image>();
widgetsImage.image
.resolve(widgets.ImageConfiguration(size: ui.Size(10, 10)))
.addListener(widgets.ImageStreamListener((widgets.ImageInfo info, bool _){
completer.complete(info.image);
}));
return completer.future;
}
Неправильно обрезает изображения без изменения размера, хотя данные изображения верны:
Future<ui.Image> loadUiImage(String imageAssetPath) async {
final ByteData data = await rootBundle.load(imageAssetPath);
List<int> bytes = data.buffer.asUint8List();
image.Image iconImage = image.Image.fromBytes(100, 100, bytes);
final Completer<ui.Image> completer = Completer();
ui.decodeImageFromList(image.decodePng(image.encodePng(iconImage)).getBytes(), (ui.Image img) {
return completer.complete(img);
});
return completer.future;
}
Недействительные данные изображения, правильно изменен размер изображения:
Future<ui.Image> loadUiImage(String imageAssetPath) async {
final ByteData data = await rootBundle.load(imageAssetPath);
List<int> bytes = data.buffer.asUint8List();
image.Image iconImage = image.Image.fromBytes(100, 100, bytes);
final Completer<ui.Image> completer = Completer();
ui.decodeImageFromList(image.encodePng(iconImage), (ui.Image img) {
return completer.complete(img);
});
return completer.future;
}
Я также пытался использовать метод Bitmap, используемый здесь , но обнаружил ошибку в предоставленной функции
Неудачное утверждение: строка 274 pos 12: 'bitmap.length == size ': не соответствует действительности
в моей попытке использования после изменения размера изображения.
Буду очень признателен за любую помощь в решении этой проблемы, заранее спасибо.