我正在尝试使用图片记录器将图像写入画布...
drawImage 需要 dart:ui 图像
我已成功导入资产图像,但网络图像出现以下错误:
[VERBOSE-2:codec.cc(97)] 解码图像失败。数据是 无效,或者使用不支持的格式进行编码。
[VERBOSE-2:shell.cc(186)] Dart 错误:未处理的异常:异常: 手术失败 0 _rootHandleUncaughtError。 (dart:async/zone.dart:1112:29) 1 _microtaskLoop (dart:async/schedule_microtask.dart:41:21) 2 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
到目前为止已尝试过代码..
netImage.obtainKey(new ImageConfiguration()).then((val) {
var load = netImage.load(val);
load.addListener((listener, err) async {
ImageInfo imageInfo;
setState(() => imageInfo = listener);
imageInfo.image.toByteData().then((ss) {
Uint8List lst = new Uint8List.view(ss.buffer);
ui.instantiateImageCodec(lst).then((val) {
val.getNextFrame().then((vaal) {
imagetoDraw = vaal.image;
});
});
});
});
});
我也遇到了同样的问题。我通过如下代码片段解决了它:
Future<Image> getImage(String path) async {
final completer = Completer<ImageInfo>();
final img = NetworkImage(path);
img.resolve(ImageConfiguration.empty).addListener(
ImageStreamListener((info, _) {
completer.complete(info);
}),
);
final imageInfo = await completer.future;
return imageInfo.image;
}
来自 https://github.com/flutter/flutter/issues/23761
netImage.obtainKey(new ImageConfiguration()).then((val) {
var load = netImage.load(val);
load.addListener((listener, err) async {
setState(() => imageInfo = listener);
// imageInfo.image.toByteData().then((ss) {
//
// Uint8List lst = new Uint8List.view(ss.buffer);
//
//// ui.instantiateImageCodec(lst).then((val) {
//// val.getNextFrame().then((vaal) {
//// imagetoDraw = vaal.image;
//// });
//// });
// });
});
});
然后..
c.drawImage(imageInfo.image, offset3, paint);