Question Description:
当我将位图保存为JPEG格式的JPEG文件时,抛出了Gdi异常 . 但是当我用PNG格式模式保存它时,它可以成功保存 .
Quick Recreate:
-
请将图像保存到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);
What i found:
经过深入调查后,我发现问题的根源来自原始图像的 the Comments property . 当我删除属性值时,错误消失 . 此外,在我将图像的注释值的值复制到记事本然后粘贴后,可以将图像保存到具有较高代码的新图像中,并且图像的大小甚至更大!
所以,我想在保存到jpeg文件时,comments属性可能包含一些敏感或不正确的charector . 人们可以就这些评论提供一些见解吗?
提前致谢 .
More try:
我尝试以下代码:
//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,就像注释掉代码一样,仍会抛出异常 .
Please help me:
-
为什么图像尺寸较大(原始尺寸为48k,切割后粘贴约78k)我只需清除注释然后再粘贴相同的值 . 有可能是一个bug吗?
-
清除注释后,为什么可以成功保存图像,然后再粘贴相同的值?是剪贴板过滤一些无效的特征?
-
为什么即使我设置了comments属性值为null,图像仍然无法保存?但如果我删除该属性,它可以工作,就像之前我尝试?
希望你能帮助我找出问题的根源 .
1 回答
我从MSDN http://social.msdn.microsoft.com/Forums/en-US/83b24aa5-511f-47cd-856a-4fbbb5688ddf/bitmap-save-jpeg-failled-but-png-is-ok-because-of-the-comments-property找到了问题的根源
原始注释似乎使用ASCII编码,但GDI会自动将其转换为Unicode . 注释已经很大,转换为Unicode的大小加倍,它超过了EXIF块的最大大小(64千字节) .