WPF开发中,对图片进行操作时,有时会遇到这样的异常“A generic error occurred in GDI+”,结合我所遇到的情况,根本原因是当一个对象对图片文件进行操作时,例如只是读取图片文件显示,另外一个对象对该文件路径进行写操作,异常出现了。
解决办法是在UI显示图像时,采用数据流加载即可避免上述问题,如果以文件加载的话,问题就会出现。
例如如下小功能,替换图像。程序首先显示了一副默认的图片,点击图片可以执行替换图像操作,点击左侧图片,替换完成后,程序崩溃了。但是点击右侧图片替换就可以。
核心代码如下:
(1)采用文件作为源进行Converter时,会出异常:
public class PathToImageConverterLeft : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string imagePath = (string)value;
if (string.IsNullOrEmpty(imagePath))
{
return null;
}
else
{
return new BitmapImage(new Uri(imagePath, UriKind.RelativeOrAbsolute));
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
(2)采用数据流作为源进行Converter时,就没有问题了。
public class PathToImageConverterRight : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string imagePath = (string)value;
if (string.IsNullOrEmpty(imagePath))
{
return null;
}
else
{
byte[] bytes = System.IO.File.ReadAllBytes(imagePath);
System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes);
return BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
Sample代码上传到此了:http://download.csdn.net/detail/u013376417/8390975