2011-03-22 144 views
1

这在ASP.NET应用程序中。参数无效调用Bitmap.Save()

本地,此代码运行良好,但在我们的生产服务器上,当调用Bitmap.Save()时,它会引发'Parameter is not valid'异常。

如果我不使用System.Drawing.Bitmap是因为它不是recommened在此基础上:

http://msdn.microsoft.com/en-us/library/system.drawing.aspx

System.Drawing命名空间中的类不支持使用 在Windows内或ASP.NET服务。 试图在这些应用程序类型 之一中使用来自 的这些类可能会产生意外问题,例如 由于运行时异常而导致服务性能降低和 。

我还能用什么?

Bitmap myBitmap = new Bitmap(img); 
myBitmap.SetResolution(img.HorizontalResolution, img.VerticalResolution); 

// get the tiff codec info 
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/tiff"); 

// Create an Encoder object based on the GUID for the Compression parameter category 
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Compression; 

// create encode parameters 
EncoderParameters myEncoderParameters = new EncoderParameters(1); 
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4); 
myEncoderParameters.Param[0] = myEncoderParameter; 

// save as a tiff 
myBitmap.Save(input, myImageCodecInfo, myEncoderParameters); 
+1

请问您能显示GetEncoderInfo(string)函数的功能吗? – 2011-03-22 20:52:42

+0

这就是服务器缺少tiff编码器,但那不是结束。就像MSDN文档所说的那样,System.Drawing类不应该用在服务中。我有一些第三方图像控件(Atalasoft),我用它来保存为tiff。 – BrianK 2011-05-20 14:32:09

回答

1

我最好的猜测是服务器没有安装tiff编解码器。如果您在Windows Server核心上运行此操作,则GDI +不可用。

0

我会验证你传递的输入流。我还会确保将相对路径正确映射到服务器路径。

0

我知道这可能对每个人都没有帮助,因为它可能适用于某些项目,而不适用于其他项目。

但我解决这个问题的方法是将目标从Framework 3.5降低到2.0。

这是我做的唯一的变化,然后它的工作。看起来像另一个版本的GDI + 3.5的搜索... ...

我想尝试的另一件事是使用从KB958911补丁,但我没有试一试,在框架修改后为我工作。

也许如果你不能降低框架,你可以试试看。