我有一个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