在修改 PictureBox 圖片時保持檔案存取權
在桌面應用程式中,如果原始映像檔已被使用,則使用新的 Bitmap() 建構子修改 PictureBox 的映像可能會導致檔案存取錯誤。當 PictureBox 保持對初始檔案的引用時,就會出現此問題,從而阻止在載入新映像時存取該檔案。
為了解決這個問題,一種記憶體友善的方法是使用 File.ReadAllBytes() 將映像載入到 MemoryStream 中,然後使用 Image.FromStream() 建立新映像。透過這種方式,在允許您在 PictureBox 中顯示新圖像而不會發生文件存取衝突的同時,原始文件將被解鎖。
以下是修改後的程式碼範例:
<code class="language-c#">public static Image FromFile(string path) { byte[] bytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(bytes)) { Image img = Image.FromStream(ms); return img; } } pbAvatar.Image = FromFile(filePath);</code>
這種方法不僅解決了文件存取問題,而且還提高了效能。測試表明,使用此技術載入圖像大約需要每張圖像 0.26 毫秒,而從點陣圖複製則大約需要每張圖像 0.50 毫秒。位元組數組較小的記憶體佔用和單一圖像創建操作有助於提高效率。
請注意,如果產生的影像需要是 Bitmap 對象,您可以使用 (Bitmap)Image.FromStream(ms) 來轉換傳回的 Image。 為了確保資源的正確釋放,我們使用了using
語句來管理MemoryStream
。
以上是更新 PictureBox 映像檔時如何防止檔案存取錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!