1. ホーム
  2. WPF

例外の解決方法 GDI+でジェネリックエラーが発生しました。

2022-01-23 02:48:12

WPFの開発において、画像を操作する際に、この例外 "A generic error occurred in GDI+" に遭遇することがあり、遭遇した状況と合わせて考えると、根本的な原因は、例えば、あるオブジェクトが画像ファイルに対して操作を行い、画像ファイルを読み込んで表示するだけで、別のオブジェクト ファイルパスに書き込む際に例外が生じていることが考えられます。

解決策としては、UIに画像を表示する際に、ファイルとして読み込む場合はデータフローローディングを使用することで、上記の問題を回避することができます。

例えば、次のような小さな関数で画像を置き換えることができます。このプログラムでは、まずデフォルトの画像を表示し、その画像をクリックすると画像の置き換え操作が実行されます。しかし、右の画像をクリックすると置換される仕組みになっている。


コアとなるコードは以下の通りです。

(1) ファイルをコンバータのソースとして使用する場合、例外が発生する。

    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)
        CultureInfo culture) {
            return null;
        }
    }





(2) データストリームをコンバータのソースとして使用する場合は問題ない。

    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
            {
                ReadAllBytes(imagePath);
                MemoryStream ms = new System;
                return BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        CultureInfo) {
            return null;
        }
    }





サンプルコードはこちらにアップロードしています。 http://download.csdn.net/detail/u013376417/8390975