Bitmap.Save参数无效

时间:2013-03-01 22:02:05

标签: c# encoding bitmap gdi+ tiff

我正在使用Bitmap.Save(location,coded,parameters)来保存tiff图像的第一帧:使用的编码方案是Tiff格式。然后我使用saveadd()等等。就像win 7 64 bit,上的魅力一样,但在32位或更旧的Windows版本上不起作用。

经过研究,我发现可能是因为tiff图像编码与GDI +之前的处理不同。

有没有办法在没有任何重大变化的情况下克服这个问题?

来源:

Parameter is not valid calling Bitmap.Save()

http://social.msdn.microsoft.com/Forums/fi-FI/netfxbcl/thread/1585c562-f7a9-4cfd-9674-6855ffaa8653

2 个答案:

答案 0 :(得分:11)

您必须使用“long”作为质量参数

EncoderParameters parametre = new EncoderParameters(1);
parametre.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (quality as long));

EncoderParameters parametre = new EncoderParameters(1);
parametre.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 90L);

long quality=90; //
EncoderParameters parametre = new EncoderParameters(1);
parametre.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

答案 1 :(得分:1)

好的,终于找到了解决方案。问题在于压缩格式是作为Save()的输入参数之一以及GDI +如何工作。

解决方案1:

需要将压缩格式更改为该窗口支持的格式。例如,.net中的(long)EncoderValue.CompressionLZW压缩在这种情况下起作用而不是(long)EncoderValue.CompressionCCITT4

但是图像的大小将高于CCITT4产生的大小。 此外,CCITT4仅适用于双色调图像,LZW适用于大多数图像。 因此,在未来提前考虑这些问题,就像在大多数使用tiff图像创建的地方一样,对于使用的压缩和这个问题并不十分重视。

或者可以在下面找到替代解决方案[我还没试过]

解决方案2:

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/1585c562-f7a9-4cfd-9674-6855ffaa8653/

补充阅读:

关于选择何种压缩以及可能引起的原因的问题:

https://stackoverflow.com/questions/3478292/whats-the-recommended-tiff-compression-for-color-photos/3480411#3480411