2

サイズを変更した画像の配列があります。私がやろうとしているのは、それらを配列から直接保存することです...

foreach (Image I in Resizedimages)
            {
                string f = Environment.GetFolderPath(Environment.SpecialFolder.Desktop).ToString() + "\\NewImages\\" + names[n];

                I.Save(f, System.Drawing.Imaging.ImageFormat.Jpeg);
                n++;

            }

問題は、プログラムを実行するたびに、「GDI+ で一般的なエラーが発生しました」という未処理の例外が発生することであり、それが save メソッドと関係があるという事実を知っています。この質問は以前にもあったと思いますが、もしそうなら申し訳ありません。オンラインで何時間も検索した後、さまざまな修正を試みましたが、おそらく私のプログラムに固有のものだと思いました。何か案は?

4

1 に答える 1

0

問題は、Bitmap オブジェクトまたは Graphics オブジェクトによって何かがロックされている可能性があります。何かを呼び出すDispose()とうまくいくか、新しいビットマップにコピーして保存することができます:

       Bitmap copy = new Bitmap(I);
       copy.Save(f, System.Drawing.Imaging.ImageFormat.Jpeg);

GDI によるファイル ロックを回避するために、MemoryStream からイメージを作成できます。

       MemoryStream stream = new MemoryStream(File.ReadAllBytes(fileName));
       Image image = Image.FromStream(stream);
于 2011-04-10T00:33:20.660 に答える