canvas - 在 Flutter 中 drawImage 或 paintImage 都不能正常工作
问题描述
我基本上想在画布上显示我在资产文件夹中的图像。
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 有类似的方法。
请指教。
解决方案
在 Flutter 中调用了两个类Image
,在不同的包中。
有Widget,它的行为类似于一个小部件,可以通过其命名的构造函数从资产、内存或网络中实例化。
还有 ui 包Image用于在较低级别进行绘画时,例如在CustomPainter
. 由于此版本在ui
包中,因此通常使用如下ui
前缀导入:
import 'dart:ui' as ui;
不要导入material
为ui
!这会导致很多混乱。
要制作小部件,请使用Image.asset
构造函数,并传递资产名称。
要ui.Image
使用资产制作 a ,请使用以下代码段:
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;
}
推荐阅读
- java - 记录未从 JTable java netbeans 上的数据库中加载
- ios - 具有后台模式的 React Native 可操作推送通知
- apache-kafka - 这可能吗?生产者 batch.size * max.request.size > broker max.message.bytes
- java - 如何使用 Unirest 将数据从 Vaadin 发布到 Vertx?
- javascript - 函数返回一个元素大于输入数字的数组和一个数组
- html - Google 协作平台 HTML 导出不断重定向到实时站点
- svg - 将一个 svg 元素居中于另一个元素时的比例关系
- c# - asp.net Web API核心项目启动类里面的SetCompatibilityVersion是什么
- c - 为什么在 C 中创建指向指向 const 的指针的指针是非法的?
- python - 通过python xlsxwriter修改Excel图表轴属性