从另一个HBITMAP复制一个位图

Copying a bitmap from another HBITMAP

本文关键字:一个 位图 另一个 HBITMAP 复制      更新时间:2023-10-16

我想写一个类来包装位图功能在我的程序。

一个有用的特性是从另一个位图句柄复制位图。我有点卡住了:

    void operator=( MyBitmapType & bmp )
    {
        HDC dcMem;
        HDC dcSource;
        if( m_hBitmap != bmp.Handle() )
        {
            if( m_hBitmap )             
                this->DisposeOf();
            // copy the bitmap header from the source bitmap
            GetObject( bmp.Handle(), sizeof(BITMAP), (LPVOID)&m_bmpHeader );
            // Create a compatible bitmap
            dcMem       = CreateCompatibleDC( NULL );
            m_hBitmap   = CreateCompatibleBitmap( dcMem, m_bmpHeader.bmWidth, m_bmpHeader.bmHeight );
            // copy bitmap data
            BitBlt( dcMem, 0, 0, bmp.Header().bmWidth, bmp.Header().bmHeight, dcSource, 0, 0, SRCCOPY );
        }
    }

这段代码缺少一件事:我怎么能得到一个HDC源位图,如果我所有的源位图是一个句柄(例如一个HBITMAP?)

您可以在上面的代码中看到,我在BitBlt()调用中使用了"dcSource"。但是我不知道如何从源位图的句柄(bmp.Handle()返回源位图句柄)中获取dcSource

你不能——源位图可能根本没有被选中到DC中,即使它是,你也没有办法找出DC。

要做你的复制,你可能想使用这样的东西:

dcSrc = CreateCompatibleDC(NULL);
SelectObject(dcSrc, bmp);

为我工作:

// hBmp is a HBITMAP 
HBITMAP hBmpCopy= (HBITMAP) CopyImage(hBmp, IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE);