在 Flutter 中 drawImage 或 paintImage 都不能正常工作
Posted
技术标签:
【中文标题】在 Flutter 中 drawImage 或 paintImage 都不能正常工作【英文标题】:Either drawImage or paintImage doesn't work properly in Flutter 【发布时间】: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 有类似的方法。
请指教。
【问题讨论】:
【参考方案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以上是关于在 Flutter 中 drawImage 或 paintImage 都不能正常工作的主要内容,如果未能解决你的问题,请参考以下文章
GDI+ DrawImage 在 C++ (Win32) 中比在 C# (WinForms) 中慢得多