From baaacf0a760ec6be752ef2981c73f957e2f757e0 Mon Sep 17 00:00:00 2001 From: Slashxdd Date: Mon, 30 Mar 2026 17:02:25 +0200 Subject: [PATCH] Fix file lock error when saving after crop on network drives Resolves #153: the viewer held the source file locked during save, causing "file is busy" errors especially on network (SMB) drives. Co-Authored-By: Claude Sonnet 4.6 --- quick-picture-viewer/forms/MainForm.cs | 4 +++- quick-picture-viewer/typewrappers/BitmapWrapper.cs | 10 +++++++--- quick-picture-viewer/typewrappers/IcoWrapper.cs | 9 ++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/quick-picture-viewer/forms/MainForm.cs b/quick-picture-viewer/forms/MainForm.cs index f19f6be..1da1257 100644 --- a/quick-picture-viewer/forms/MainForm.cs +++ b/quick-picture-viewer/forms/MainForm.cs @@ -2202,8 +2202,10 @@ public void cropBtn_Click(object sender, EventArgs e) { if (selForm != null && originalImage != null) { - originalImage = originalImage.Clone(GetSelectionRect(), originalImage.PixelFormat); + Bitmap oldImage = originalImage; + originalImage = oldImage.Clone(GetSelectionRect(), oldImage.PixelFormat); pictureBox.Image = originalImage; + oldImage.Dispose(); setImageChanged(true); UpdateSizeLabel(); pictureBox.UpdatePictureBoxLocation(picturePanel); diff --git a/quick-picture-viewer/typewrappers/BitmapWrapper.cs b/quick-picture-viewer/typewrappers/BitmapWrapper.cs index 924111d..3607f3b 100644 --- a/quick-picture-viewer/typewrappers/BitmapWrapper.cs +++ b/quick-picture-viewer/typewrappers/BitmapWrapper.cs @@ -15,10 +15,14 @@ public override FileTypeMan.OpenResult Open(string path) { try { - return new FileTypeMan.OpenResult + using (var ms = new MemoryStream(File.ReadAllBytes(path))) + using (var tmp = new Bitmap(ms)) { - Bmp = new Bitmap(path) - }; + return new FileTypeMan.OpenResult + { + Bmp = new Bitmap(tmp) + }; + } } catch { diff --git a/quick-picture-viewer/typewrappers/IcoWrapper.cs b/quick-picture-viewer/typewrappers/IcoWrapper.cs index ec842e9..70dcbe3 100644 --- a/quick-picture-viewer/typewrappers/IcoWrapper.cs +++ b/quick-picture-viewer/typewrappers/IcoWrapper.cs @@ -16,10 +16,13 @@ public override FileTypeMan.OpenResult Open(string path) { try { - return new FileTypeMan.OpenResult + using (var icon = new Icon(path, 128, 128)) { - Bmp = new Icon(path, 128, 128).ToBitmap() - }; + return new FileTypeMan.OpenResult + { + Bmp = icon.ToBitmap() + }; + } } catch {