我有一个函数需要一个位图,将它的一部分复制并保存为8bpp tiff。结果图像的文件名是唯一的,文件不存在,程序有权写入目标文件夹。System.Drawing.Image.Save抛出ExternalException:在GDI中发生了一般性错误
void CropImage(Bitmap map) {
Bitmap croped = new Bitmap(200, 50);
using (Graphics g = Graphics.FromImage(croped)) {
g.DrawImage(map, new Rectangle(0, 0, 200, 50), ...);
}
var encoderParams = new EncoderParameters(2);
encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 8L);
encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionNone);
croped.Save(filename, tiffEncoder, encoderParams);
croped.Dispose();
}
奇怪的是,这funcion效果很好,在某些计算机(Win 7的),并抛出System.Runtime.InteropServices.ExternalException:在其他计算机上(主要是Win XP的)GDI异常发生一般性错误。
所有计算机都安装了.NET 3.5 SP1运行时。
如果我使用croped.Save(filename, ImageFormat.Tiff);
而不是croped.Save(filename, tiffEncoder, encoderParams);
比它适用于所有计算机,但我需要以8bpp格式保存Tiff。
你有什么想法,问题可能出在哪里?
谢谢,卢卡斯
也许图片还没有保存,并开始处置? – serhio 2010-01-10 15:12:59
它是否有任何Windows XP机器可以使用? – SLaks 2010-01-10 15:27:16
GDI +在Vista中升级到版本1.1。我从来没有发现任何描述这些变化的文档。听起来像你找到一个。 – 2010-01-10 16:41:09