问题描述:
当我将位图保存为JPEG格式的JPEG文件时,抛出了Gdi异常。但是当我用PNG格式模式保存时,它可以成功保存。
快速重新创建:
请将照片保存到broswer的.jpg文件中。点击此处:IncorrectImage,CorrectImage。(实际上,在我们的应用程序中,我们动态请求图像,然后将图像保存为JPEG。)
使用以下代码查看异常:
string newFile = @"D:\Temp\newImage.jpg";
var newBitmap = Image.FromFile(@"D:\Temp\IncorrectImage.jpg");
newBitmap.Save(newFile,System.Drawing.Imaging.ImageFormat.Jpeg);
我找到了什么:
经过深入调查后,我发现问题的根源来自原始图像的评论属性。当我删除属性值时,错误消失。此外,在我将图像的注释值的值复制到记事本然后粘贴之后,可以将图像保存到具有较高代码的新图像中,并且图像的尺寸甚至更大!所以,我想当保存到jpeg文件时,comments属性可能包含一些敏感或不正确的charector。人们可以就这些评论提供一些见解吗?
先谢谢。
更多尝试:
我尝试以下代码:
//foreach (var item in newBitmap.PropertyItems)
//{
// if (item.Id == 37510)
// {
// item.Value = null;
// item.Len = 0;
// }
//}
newBitmap.RemovePropertyItem(37510);
newBitmap.Save(newFile, System.Drawing.Imaging.ImageFormat.Jpeg);
如果删除属性项,则可以成功保存newimage。但是,如果我只是像注释掉代码那样将其值设置为null,则仍会抛出异常。
请帮帮我:
希望你能帮助我找出问题的根源。
答案 0 :(得分:1)
原始注释似乎使用ASCII编码,但GDI +会自动将其转换为Unicode。注释已经很大,转换为Unicode的大小加倍,它超过了EXIF块的最大大小(64千字节)。