C# 位图PNG保存,无需修改

C# 位图PNG保存,无需修改,c#,image,gdi+,C#,Image,Gdi+,我正在尝试将PNG图像加载到位图中,并保存它而不进行修改 我尝试了以下几点: var png = Bitmap.FromFile("t_02.png"); png.Save("t_02_out.png", ImageFormat.Png); 我还尝试: var png = Bitmap.FromFile("t_02.png"); png.Save("t_02_out.png"); 在这两种情况下,原始的233kb文件处理了356kb的图像。我做错了什么?PNG是压缩格式。加载时解压,保存时再

我正在尝试将PNG图像加载到位图中,并保存它而不进行修改

我尝试了以下几点:

var png = Bitmap.FromFile("t_02.png");
png.Save("t_02_out.png", ImageFormat.Png);
我还尝试:

var png = Bitmap.FromFile("t_02.png");
png.Save("t_02_out.png");

在这两种情况下,原始的233kb文件处理了356kb的图像。我做错了什么?

PNG是压缩格式。加载时解压,保存时再压缩。结果不必完全相同。不同之处在于,最初图像的压缩效率比代码使用的压缩器更高(或者,您需要微调压缩选项)。特别是,如果您使用流行的图形编辑器工具保存为PNG,则可以选择在其中指定压缩级别,从而为同一图片指定不同的输出

从评论中建立有用的链接:


相关图像以灰度颜色类型存储。本规范描述了:

然后将像素存储为单个字节
.NET
将PNG文件保存为32位,而不考虑像素格式

我得到的最接近的方法是使用
a RGE
grayscale过滤器和存储,将其转换为调色板存储

结果与原始结果更接近,但由于颜色苍白,结果通常更大


结论:.NET图像格式支持非常糟糕。我使用了
ImageMagic
来解决.NET的不足。

也检查了这些文章:用较小的压缩来解释太多了。PNG支持许多GDI+无法复制的图像格式。如果重要的话,您可以修改PngBitmapEncoder,BitmapSource为您提供了对像素格式的更多控制。