image - 如何在不使用异步的情况下将图像转换为 uint8list?
问题描述
PdfImage 需要Uint8List作为参数,但我有ImageProvider。那么我们如何在flutter中将image转换为uint8list呢?
var imageProvider = AssetImage('assets/test.jpg');
final image = PdfImage(
pdf.document,
image:???, /// Uint8List required
width: img.width,
height: img.height,
);
解决方案
利用rootBundle.load()
(await rootBundle.load(/*YOUR IMAGE PATH HERE*/)).buffer.asUint8List()
更新
作为load()
异步操作,您需要等到数据完全加载。在此之前尝试用一些加载指示器替换 UI。
ByteData imageData;
@override
void initState() {
rootBundle.load('assets/test.jpg')
.then((data) => setState(() => this.imageData = data));
}
@override
Widget build(BuildContext context) {
if (imageData == null) {
return Center(child: CircularProgressIndicator());
}
final image = PdfImage(
pdf.document,
image: imageData.buffer.asUint8List(),
width: img.width,
height: img.height,
);
...
}
推荐阅读
- python - 有没有办法参数化 VS Code 的 python.pythonPath 设置?
- javascript - 无法在 Visual Studio 中调试 JS:验证断点位置
- python - Python Lambda 函数变量排序
- javascript - 有什么办法可以将一个java脚本字符串变成一个数组然后改变数组值然后最后把它变成一个字符串
- c# - 为什么我的列表框中没有显示任何内容?C#
- c# - ASP.Net Azure OpenId 集成
- android - Android - 填充回收站视图问题
- java - Java多线程在长进程中减慢,最大CPU使用率
- xamarin.forms - Xamarin.Forms - 信息丰富的应用布局建议/方向
- android - 返回主活动后取消选中导航抽屉中的菜单项