2009-08-05 30 views
0

Iveはこのようなことを別のプロジェクトでは動作させることができましたが、現在のものでは動作しませんでした。 ファイルをロックし、saveを呼び出す前にbビットマップを破棄しても、再度保存すると上書きすることはできません。私は何が間違っているかもしれないの任意のアイデア?Bitmap.SaveのGDI +エラー

Bitmap b = (Bitmap)Image.FromFile("image.png"); 
Bitmap bClone = (Bitmap)b.Clone(); 

    // modify bClone here.. 

b.Dispose(); 
b = null; 
GC.Collect(); 

bClone.Save("image.png"); 
+0

FYI、Dispose()はすぐにビットマップのメモリを解放します。 GC.Collect()の呼び出しは不要で、一般的には見下されています。 –

+0

ありがとう、私はそれを知っていませんでした。 – CodeSpeaker

答えて

1

「クローン」メソッドは、あなたが望むことをしません。ビットマップのコピーコンストラクタを使用して、同じピクセルを含む別々のイメージを作成することができます。

Bitmap bClone = null; 
using (Bitmap b = (Bitmap)Image.FromFile("image.png")) 
{ 
    bClone = new Bitmap(b); 
    // modify bClone here.. 
} 

bClone.Save("image.png"); 
bClone.Dispose(); 
+0

クローンメソッドは何をしますか? :) –

0

FromFileを使用すると、実際にはファイルオブジェクトの有効期間を制御できません。代わりにFromStreamを試してみてください。

関連する問題