2

我正在编写一个需要将 a 保存System.Drawing.Image到文件的方法。在不知道创建的原始文件的Image情况下,是否可以确定它应该具有什么文件扩展名?

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

Image我以原始格式保存它是否重要?Image从PNG生成的与从JPEG生成的有什么不同吗?还是存储在Image对象中的数据是完全通用的?

4

4 回答 4

2

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

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

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

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

于 2010-09-03T20:54:11.000 回答
1

Image.RawFormat 有猫腻,远离它。我已经看到几份报告说它没有明显的理由没有法律价值。至今未确诊。

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

于 2010-09-03T20:48:48.580 回答
0

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

我一直像你一样使用 switch 语句,也许已经融入了扩展方法或其他东西。

于 2010-09-03T20:19:55.277 回答
0

To answer your question 'Does it even matter that I save the Image in it's original format?' explicitly: Yes, it does, but in a negative way.

When you load the image, it is uncompressed internally to a bitmap (or as ChrisF calls it, an uncompressed data stream). So if the original image used a lossy compression (for example jpeg), saving it in the same format will again result in loss of information (i.e. more artifacts, less detail, lower quality). Especially if you have repeated actions of read - modify - save, this is something to avoid.

(Note that it is also something to avoid if you are not modifying the picture. Just the repeated decompress - compress cycles will degrade the image quality).

So if disk space is not an issue here (and it usually isn't in the age of hard disks that are big enough for HD video), always store any intermediate pictures in lossless compression formats, or uncompressed. You may consider saving the finall output in a compressed format, depending on what you use it for. (If you want to present those final pictures on the web, jpeg or png would be good choices).

于 2010-09-03T21:09:15.013 回答