如何从网络图片中获取ui.Image(dart:ui)?

问题描述 投票:0回答:2

我正在尝试使用图片记录器将图像写入画布...

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;
        });
      });
    });
  });
});
flutter android-canvas flutter-layout flutter-animation
2个回答
16
投票

我也遇到了同样的问题。我通过如下代码片段解决了它:

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;
}

0
投票

来自 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);
© www.soinside.com 2019 - 2024. All rights reserved.