CreateBitmapSourceFromHBitmap() 사용 시 WPF에서 메모리 누수 해결
WPF 애플리케이션은 생성된 이미지를 픽셀 단위로 표시하는 경우가 많습니다. 일반적인 접근 방식은 System.Drawing.Bitmap
을 사용하고 BitmapSource
를 통해 CreateBitmapSourceFromHBitmap()
로 변환하는 것입니다. 하지만 이 방법은 주의 깊게 다루지 않으면 메모리 누수가 발생할 수 있습니다.
문제의 근원
핵심 이슈는 GetHbitmap()
에서 비롯됩니다. 이 함수는 Windows 운영 체제에서 메모리를 관리하는 GDI 비트맵 개체를 반환합니다. 결정적으로 이 메모리는 DeleteObject()
을 사용하여 명시적으로 해제해야 합니다. 그렇지 않으면 CreateBitmapSourceFromHBitmap()
.
해결책: 적절한 자원 관리
메모리 누수를 방지하려면 BitmapSource
을 만든 후 GDI 비트맵 개체를 올바르게 삭제하는 것이 중요합니다. 다음 코드는 올바른 접근 방식을 보여줍니다.
<code class="language-csharp">// Import the DeleteObject() method [DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); // Code to create and dispose of the Bitmap using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1000, 1000)) { IntPtr hBitmap = bmp.GetHbitmap(); try { var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); // Use the 'source' BitmapSource here... } finally { DeleteObject(hBitmap); } }</code>
using
안전 강화를 위한 문구 사용
using
문은 예외가 발생하더라도 자동 폐기를 보장하여 보다 깨끗하고 안전한 리소스 관리 방법을 제공합니다.
이러한 기술을 사용하면 CreateBitmapSourceFromHBitmap()
과 관련된 메모리 누수를 효과적으로 제거하여 WPF 애플리케이션 내에서 최적의 메모리 관리를 유지할 수 있습니다.
위 내용은 WPF에서 CreateBitmapSourceFromHBitmap()을 사용할 때 메모리 누수를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!