ホームページ >バックエンド開発 >C++ >WPF: CreateBitmapSourceFromHBitmap() 使用時のメモリ リークを防ぐ方法

WPF: CreateBitmapSourceFromHBitmap() 使用時のメモリ リークを防ぐ方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-10 10:26:40244ブラウズ

WPF: How to Prevent Memory Leaks When Using CreateBitmapSourceFromHBitmap()?

WPF: CreateBitmapSourceFromHBitmap() でのメモリ リーク

WPF アプリケーションで CreateBitmapSourceFromHBitmap() を繰り返し使用すると、メモリ リークが発生する可能性があります。この問題は、CreateBitmapSourceFromHBitmap() によって使用される基になる GDI ビットマップが正しくリリースされていないために発生します。

このメモリ リークを解決するには、gdi32.dll ライブラリの DeleteObject() メソッドを使用して GDI ビットマップを手動で解放する必要があります。これを実現するには、Bitmap オブジェクトを using() ステートメントでラップします。これにより、Dispose() メソッドが自動的に呼び出され、GDI ビットマップが解放されます。更新されたコードは次のとおりです:

<code class="language-csharp">using System.Runtime.InteropServices;

...

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());
    }
    finally
    {
        DeleteObject(hBitmap);
    }
}</code>

using ステートメントを使用し、DeleteObject() を明示的に呼び出すことで、GDI ビットマップを解放し、メモリ リークを防ぐことができます。これにより、繰り返し呼び出された場合でもメモリが正しく解放されます。

以上がWPF: CreateBitmapSourceFromHBitmap() 使用時のメモリ リークを防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。