diff --git a/TIASshot/Utils/BitmapUtil.cs b/TIASshot/Utils/BitmapUtil.cs index 82d10b6..57818c9 100644 --- a/TIASshot/Utils/BitmapUtil.cs +++ b/TIASshot/Utils/BitmapUtil.cs @@ -44,6 +44,7 @@ BitmapData srcData = null; BitmapData dstData = null; + bool succeeded = false; try { srcData = src.LockBits(rect, ImageLockMode.ReadOnly, src.PixelFormat); dstData = dst.LockBits(rect, ImageLockMode.WriteOnly, dst.PixelFormat); @@ -58,10 +59,13 @@ IntPtr dstRow = IntPtr.Add(dstData.Scan0, y * dstData.Stride); CopyMemory(dstRow, srcRow, count); } + succeeded = true; } finally { // src は ReadOnly ロックのみなので UnlockBits は元データを変更しない(src は破損しない) if (srcData != null) src.UnlockBits(srcData); if (dstData != null) dst.UnlockBits(dstData); + // LockBits 等が例外を投げた場合,呼び出し元に渡らない dst をここで解放する(GC 任せにしない) + if (!succeeded) dst.Dispose(); } return dst;