2013-03-01 186 views
4

我使用Bitmap.Save(location,coded,parameters)保存tiff图像的第一帧:使用的编码方案是Tiff格式。然后我使用saveadd()等。像win 7 64位,上的魅力工作,但不适用于32位或更旧的Windows版本。Bitmap.Save参数无效

经过研究,我发现它可能是由于TIFF图像编码与GDI +之前的处理方式不同。

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

来源:

Parameter is not valid calling Bitmap.Save()

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

+0

什么是错误? – 2013-03-01 22:06:38

+0

所以,你链接到你问的确切问题,不是吗?我知道这是一个旧帖子,但重复是重复。 – 2013-03-01 22:06:40

+0

@Christian'参数无效'是Save()函数的错误 – Dexters 2013-03-01 22:26:02

回答

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

9

您必须使用 “长” 的质量参数

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); 
+0

是的,我正在使用不同的参数,但它的长期价值。没有问题,我猜 – Dexters 2013-03-01 22:25:10

+0

我使用MultiFrame,FrameDimesion和Flus长 – Dexters 2013-03-01 22:30:32

+0

我正在使用(长)类型转换所有参数。 – Dexters 2013-03-02 00:32:01