簡體   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