我有一個winform C#桌面應用程序。保留圖像質量
我有JPEG文件在未來絡繹不絕 我當前圖像與以前的1 比較通過使用第三方工具 - Emgu - 我可以創建一個只包含不同的新形象。
然後,我將該圖像轉換爲內存流,然後轉換爲字節數組。
在接收應用程序中,我接受這個字節數組並使用這些字節通過存儲器流加載圖像。
問題在於圖像降解了很多。
如果在將圖像轉換爲客戶端的內存流之前將圖像保存到硬盤驅動器,則圖像質量良好。
問題出在我將它作爲內存流加載時。
我把它編碼爲jpeg。
如果我在發送到服務器之前將其編碼爲PNG,質量再次良好。 編碼到PNG字節數組中的大小的麻煩出現了。
我的意圖一直是減少我必須上傳的字節數以提高響應時間。
我做錯了什麼,或者不能這樣做?
這是我的代碼:
Bitmap imgContainingDifference
= GetDiffFromEmgu(CurrentJpegImage, PreviousJpegImage);
using (System.IO.MemoryStream msIn = new System.IO.MemoryStream())
{
holding.Save(msIn, System.Drawing.Imaging.ImageFormat.Jpeg);
data = msIn.ToArray();
}
//test here
using (System.IO.MemoryStream msOut = new System.IO.MemoryStream(_data))
{
Bitmap testIMG = (Bitmap)Image.FromStream(msOut);
}
//result is image is poor/degrades
如果我這樣做,而不是:
using (System.IO.MemoryStream msIn = new System.IO.MemoryStream())
{
holding.Save(msIn, System.Drawing.Imaging.ImageFormat.Png);
data = msIn.ToArray();
}
using (System.IO.MemoryStream msOut = new System.IO.MemoryStream(_data))
{
Bitmap testIMG = (Bitmap)Image.FromStream(msOut);
}
//Image is good BUT the size of the byte array is
//10 times the size of the CurrentFrame right at the start.
這是圖像的外觀使用從孩子的建議時,如:
我現在已經嘗試使用來自@Ma的那種建議的編碼器如果我使用FreeImage.Net,gnatLU和我也可以獲得相同質量的圖像。
你想要吃你的蛋糕,也吃它。如果使用Jpeg等有損壓縮,圖像質量會降低。如果您使用無損壓縮(如PNG),圖像質量將保持不變,但尺寸預計會增加。你不能雙方都有。 – Rotem
嗨,感謝您的反饋。原來的圖像是jpeg。我只比較兩張圖像之間的差異,再次以相同格式(jpeg)保存它,然後重建當前幀(作爲jpeg)並過度施加像素變化。在任何時候,我都在做除jpeg之外的任何加載,比較和保存工作。這是一種觀察結果,當以PNG格式保存內存流中的更改時,質量是確定的。我現在所能想到的是,這個比較的第三方工具實際上是將圖片加載到png中來做到這一點。 –
最初的圖片也是Jpegs,並不重要。如果您在photoshop中加載jpeg並將其保存爲jpeg,則結果將比原始結果低。每次壓縮迭代都會進一步降低質量,就像您製作施樂公司的施樂公司的施樂公司一樣。 – Rotem