我对C#保存位图的方式感到困惑。我目前使用这个语句将位图保存到(虚拟)任何扩展名(.ico,.dds等)。将位图保存为任何格式
Bitmap.Save(FileName);
这实际上适用于我选择的任何扩展名,但我怀疑它是以正确格式保存的。之所以说怀疑是因为我发现这里的另一篇文章, How to save Bitmap as icon?,这确实让喜欢:
// Create a Bitmap object from an image file.
Bitmap bmp = new Bitmap(sFn);
// Get an Hicon for myBitmap.
IntPtr Hicon = bmp.GetHicon();
// Create a new icon from the handle.
Icon newIcon = Icon.FromHandle(Hicon);
//Write Icon to File Stream
System.IO.FileStream fs = new System.IO.FileStream(destFileName, System.IO.FileMode.OpenOrCreate);
newIcon.Save(fs);
这显然是不同的方式。所以有两个问题:
- 如果第二种方法是“正确”的方式,第一种方法怎么办?
- 我是否需要为每个我希望支持的单个扩展程序自定义保存属性,还是第一个足够用于任何扩展名的方法?
您没有在Save()调用中指定图像格式。所以它被保存为PNG。毫无疑问,文件扩展名错误。这并不会引发太多的程序,它们会查看文件以了解真实的图像格式,它们的头文件标识真正的格式。 PNG是一个非常好的格式,你应该赞成。没有任何方法可以保存.ico或.dds文件,gdiplus没有这种格式的编码器。 ImageFormat.Icon已定义但未实现。 –
真的,我认为.ico是一个.ico文件只是一个PNG(或其他类型,我所知道的)与.ico扩展。为了支持.dds文件(GDI +没有编码器),我必须实现我自己的编码器。这更有意义。谢谢回复! –