【问题标题】:Either drawImage or paintImage doesn't work properly in Flutter在 Flutter 中 drawImage 或 paintImage 都不能正常工作
【发布时间】:2019-02-22 18:44:48
【问题描述】:

我基本上想在画布上显示我在资产文件夹中的图像。

    import 'package:flutter/material.dart' as ui;

    ...

    ui.Image img = ui.Image.asset("images/some_image.png");
    ui.paintImage(canvas: canvas, image: img);

当我尝试将 img 分配给 paintImage 的图像时收到以下错误消息。

参数类型'Image (C:\ABC\flutter\packages\flutter\lib\src\widgets\image.dart)'不能分配给参数类型'Image (C:\ABC\flutter\ bin\cache\pkg\sky_engine\lib\ui\painting.dart)'。

我真的不知道会出什么问题,我见过其他代码与 ui.Image 有类似的方法。

请指教。

【问题讨论】:

    标签: canvas dart flutter flutter-layout


    【解决方案1】:

    flutter 中有两个名为Image 的类,在不同的包中。

    Widget,其行为类似于小部件,可以通过其命名构造函数从资产、内存或网络中实例化。

    还有 ui 包Image 用于在较低级别绘制时使用,例如在CustomPainter 中。由于此版本位于 ui 包中,因此通常使用 ui 前缀导入,如下所示:

    import 'dart:ui' as ui;
    

    不要将material 导入为ui!这会导致很多混乱。

    要制作小部件,请使用 Image.asset 构造函数,并传递资产名称。

    要从资产中创建ui.Image,请使用此 sn-p:

      Future<ui.Image> load(String asset) async {
        ByteData data = await rootBundle.load(asset);
        ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List());
        ui.FrameInfo fi = await codec.getNextFrame();
        return fi.image;
      }
    

    【讨论】:

    • 啊,我明白了。谢谢
    • 我现在遇到了这个答案并且遇到了一个非常相似的问题。我的图像是 base64Encoded 字符串,所以我尝试执行以下操作: void paint(Canvas canvas, Size size) async { canvas.drawImage(await load(image), Offset(0.0, 0.0), Paint()); ... Future load(String image) async { Uint8List bytes = base64Decode(image); ui.Codec 编解码器 = 等待 ui.instantiateImageCodec(bytes); // ui.Codec 编解码器 = 等待 ui.instantiateImageCodec(data.buffer.asUint8List()); ui.FrameInfo fi = 等待 codec.getNextFrame();返回fi.image; *并得到无法加载错误
    • 最好提出一个新问题。
    • @Damandroid 你得到上面查询的解决方案了吗?
    • 没有@princeoo7。现在它被搁置了。
    猜你喜欢
    • 2014-12-20
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多