File: Windows\Win32\Graphics\Gdi\HBITMAP.cs
Web Access
Project: src\src\System.Private.Windows.Core\src\System.Private.Windows.Core.csproj (System.Private.Windows.Core)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Windows.Win32.Graphics.Gdi;
 
internal readonly partial struct HBITMAP : IDisposable
{
    public void Dispose()
    {
        if (!IsNull)
        {
            PInvokeCore.DeleteObject(this);
        }
    }
 
    /// <summary>
    ///  Creates a compatible bitmap copying the content of the current bitmap.
    /// </summary>
    public HBITMAP CreateCompatibleBitmap(int width, int height)
    {
        using var screenDC = GetDcScope.ScreenDC;
 
        // Create a compatible DC to render the source bitmap.
        using CreateDcScope sourceDC = new(screenDC);
        using SelectObjectScope sourceBitmapSelection = new(sourceDC, this);
 
        // Create a compatible DC and a new compatible bitmap.
        using CreateDcScope destinationDC = new(screenDC);
        HBITMAP compatibleBitmap = PInvokeCore.CreateCompatibleBitmap(screenDC, width, height);
 
        // Select the new bitmap into a compatible DC and blit in the original bitmap.
        using SelectObjectScope destinationBitmapSelection = new(destinationDC, compatibleBitmap);
        PInvokeCore.BitBlt(
            destinationDC,
            0,
            0,
            width,
            height,
            sourceDC,
            0,
            0,
            ROP_CODE.SRCCOPY);
 
        return compatibleBitmap;
    }
}