复制一个位图从另一个HBITMAP

6
我将尝试编写一个类来包装程序中的位图功能。
其中一个有用的功能是从另一个位图句柄复制位图。但我有些困惑:
    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 );
        }
    }

这段代码缺少一件事情:如果我只有源位图的句柄(例如HBITMAP),那么我如何获取到源位图的HDC呢?

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

2个回答

11

你无法这样做 - 源位图可能根本没有被选择到设备上下文中,即使已经选择也无法找出使用哪个设备上下文。

要复制,请使用类似以下内容的代码:

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

那么你可以从源DC复制到目标DC。


8

对我有用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接