비트맵 로딩 중 C# 파일 잠금 문제 해결
"파일이 다른 프로세스에서 사용 중이기 때문에 프로세스에서 해당 파일에 액세스할 수 없습니다."라는 오류 메시지는 일반적으로 Bitmap 객체가 초기화 후 이미지 파일에 잠금을 설정할 때 발생합니다(예: pbAvatar.Image = new Bitmap(filePath)
). 이렇게 하면 이후에 파일에 액세스하거나 수정하려는 시도가 방지됩니다.
해결책은 이 자물쇠를 해제하는 것입니다. 매우 효과적인 방법은 비트맵 생성자의 파일 잠금 메커니즘을 우회하여 스트림에서 직접 이미지를 로드하는 것입니다.
<code class="language-csharp">public static Image LoadImageFromStream(string path) { byte[] imageBytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image img = Image.FromStream(ms); return img; } }</code>
이 함수는 이미지 파일을 바이트 배열로 읽은 다음 MemoryStream을 사용하여 이미지 개체를 로드하여 파일 잠금을 방지합니다. 그러면 이 로드된 이미지를 PictureBox(예: pbAvatar.Image = LoadImageFromStream(filePath);
)에 할당할 수 있습니다.
성능 고려 사항
비트맵 객체가 꼭 필요한 경우 로드된 이미지를 효율적으로 변환할 수 있습니다.
<code class="language-csharp">return (Bitmap)Image.FromStream(ms);</code>
벤치마킹에 따르면 바이트 배열에서 직접 로드하는 것이 기존 비트맵에서 비트맵을 생성하는 것(이미지당 약 0.50ms)보다 상당히 빠릅니다(이미지당 약 0.26ms). 이러한 성능 향상은 불필요한 이미지 사본을 피하는 데서 비롯됩니다.
위 내용은 C#에서 비트맵 초기화로 잠긴 파일을 잠금 해제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!