基本上,我试图通过将灰度图像转换为全彩图像来制作一个动画。全彩图像是这样加载的。
ByteData bytes = await rootBundle.load("...");
ui.Codec codec = await ui.instantiateImageCodec(bytes.buffer.asUint8List());
ui.FrameInfo fi = await codec.getNextFrame();
return (await fi.image.toByteData()).buffer.asUint8List();
在动画部件中,我所做的是简单地将部分图像数据转换为灰度图像,其余部分保持不变。这个问题是,当我用这种方式将字节转换为图像小组件时。
return Image.memory(
imglib.encodePng(imglib.Image.fromBytes(
widget.rawWidth, widget.rawHeight, p)));
p是原图中字节的修改版本。但是,在屏幕上,什么都没有出现。而且调用
return Image.memory(p);
会在instantiateCodec因缺乏元数据而失败时触发异常。有什么办法可以解决这个问题吗?
好吧,我想出了一个办法来摆脱这个问题。对于上面这个问题,我猜测是由于图像运行速度慢,显示帧率低于60造成的。我所做的,是改成按动画值建立一个堆栈与前面的图像剪辑。