なぜGDIは、私は大きな画像を削除させていないのだろうか?
-
20-09-2019 - |
質問
私のASP.NETアプリケーションは、画像クロッピングとサイズ変更機能を有しています。これは、アップロードされた一時的な画像が削除されている必要があります。すべてが正常に動作しますが、私は80pxで80pxよりも画像が大きく削除しようとすると、私は、私はすべてのリソースを解放したにも関わらず、「...ファイル別のプロセスによってロックされている」というエラーが表示されます。
ここに抜粋です。
System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone(); //advice from another forum
tempimg.Dispose();
img = resizeImage(img, 200, 200); //delete only works if it's 80, 80
img.Save(newpath);
img.Dispose();
File.Delete(temppath);
解決
私はあなたのimg変数に割り当てられた最初のイメージのインスタンスを配置していないと考えています。
の代わりにこれを考えてみます:
System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone();
tempimg.Dispose();
System.Drawing.Image img2 = resizeImage(img, 200, 200);
img2.Save(newpath);
img2.Dispose();
img.Dispose();
File.Delete(temppath);
他のヒント
あなたがこの方法で画像を作成した場合、それはロックされません。
using (FileStream fs = new FileStream(info.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
byte[] data = new byte[fs.Length];
int read = fs.Read(data, 0, (int)fs.Length);
MemoryStream ms = new MemoryStream(data, false);
return Image.FromStream(ms, false, false); // prevent GDI from holding image file open
}
所属していません StackOverflow