System.Drawing.Image的文件扩展名

时间:2010-09-03 20:15:35

标签: c# .net image system.drawing.imaging

我正在编写一个需要将System.Drawing.Image保存到文件的方法。在不知道创建Image的原始文件的情况下,无论如何确定它应该具有哪个文件扩展名?

我提出的最佳解决方案是使用值为Image.RawFormat的Switch / Case语句。

我将Image保存为原始格式是否重要?从PNG生成的Image是否与从JPEG生成的一个不同?或者,Image对象中存储的数据是否完全通用?

4 个答案:

答案 0 :(得分:2)

虽然史蒂夫丹纳是正确的,因为从JPG创建的图像看起来与从PNG创建的图像看起来不同,一旦加载到内存中,它就是未压缩的数据流。

这意味着您可以将其保存为您想要的任何文件格式。

但是,如果您加载JPG图像然后将其保存为另一个JPG,则由于压缩算法而丢弃了更多信息。如果你反复这样做,你最终丢失图像。

如果可以,我建议您始终保存为PNG。

答案 1 :(得分:1)

Image.RawFormat有cooties,远离它。我已经看到几个没有合理价值的报道。尚未确诊。

你是对的,你保存它的格式并不重要。加载文件后,内部格式对于具有相同像素格式的任何位图(非矢量)都是相同的。通常避免重新压缩jpeg文件,它们往往会变大并获得更多的工件。史蒂夫提到了多帧文件,需要以不同的方式保存。

答案 2 :(得分:0)

是的,这绝对重要,因为不同的文件格式支持不同的功能,如压缩,多帧等。

我总是使用像你一样的switch语句,或者加入扩展方法或其他东西。

答案 3 :(得分:0)

回答你的问题'我将图像保存为原始格式是否真的很重要?'明确:是的,确实如此,但是却是消极的。

加载图像时,它在内部未压缩到位图(或ChrisF调用它,一个未压缩的数据流)。因此,如果原始图像使用有损压缩(例如jpeg),则以相同格式保存它将再次导致信息丢失(即更多伪像,更少细节,更低质量)。特别是如果你有重复的读 - 修改 - 保存的动作,这是要避免的。

(请注意,如果您不修改图片,也可以避免这种情况。只是重复的解压缩 - 压缩周期会降低图像质量。)

因此,如果磁盘空间不是问题(并且它通常不在硬盘足够大的高清视频时代),请始终以无损压缩格式或未压缩格式存储任何中间图片。您可以考虑以压缩格式保存finall输出,具体取决于您使用它的方式。 (如果你想在网上展示最终的图片,jpeg或png将是不错的选择)。