繁体   English   中英

Flutter ui.ImageByteFormat.rawRgba 的图像质量很差

[英]Flutter ui.ImageByteFormat.rawRgba has terrible Image Quality

在我的项目中,我需要捕获 flutter animation 的框架并将该框架作为图像(可能是 in.png)保存到设备存储。

我正在使用 RepaintBoundary 来捕获帧,但我不能使用ui.ImageByteFormat.png方法,因为将帧捕获为 a.png 需要很多处理时间,而且由于我需要拍摄很多帧不会是一个可行的解决方案。 相反,我使用的是超级快的ui.ImageByteFormat.rawRgba ,但是当我将其保存到 Storage 时,图像质量很糟糕。 它看起来几乎与我捕获的图像相同。

我正在使用 FFMPEG 将 .raw 或 .bmp 格式转换为 png 并将其保存到存储中。

在这两种情况下,使用 raw 或使用 BitMap output 图像是这样的:

在此处输入图像描述

但是,图像的质量应该是这样的在此处输入图像描述

现在,我需要帮助以通过使用无关紧要的任何文件格式保存此原始捕获,或者如果您有任何其他可行的方法来捕获 flutter animation 的帧,请分享。

恕我直言,这与质量无关(例如,“模糊”图像质量差)。 那是因为格式上存在一些问题 - 编码/解码时必须有人错误地理解格式。

查看您的代码后,您的Bitmap.fromHeadless(300,100,bytes)很可能有问题。 图像不是 300x100。 请更正尺寸。

让我解释一下“原始”或“bmp”格式。 基本上,该格式只是将像素一个接一个地放到一个大字节列表中。 例如,数组看起来像: ["red at (0,0)", "green at (0,0)", "blue at (0,0)", "alpha at (0,0)", "red at (0,1)", "green at (0,1)", "blue at (0,1)", "alpha at (0,1)", ...] 请注意,这是行主要订单。 换句话说,顺序就像 "pixel0,0", "pixel0,1", ... "pixel0,k", "pixel1,0", ...

因此,如果你指定了错误的尺寸,那么它就会被错误地解释——这就是你看到那个奇怪的图像的原因!

关于如何获取大小:在你的ui.Image image = await boundary.toImage(pixelRatio: 3);行之后 ,您可以简单地执行image.widthimage.height来获得正确的大小。

如果您有不明白的地方请回复,我愿意解释;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM