繁体   English   中英

从另一个HBITMAP复制位图

[英]Copying a bitmap from another HBITMAP

我正在尝试编写一个类来包装程序中的位图功能。

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

    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()返回源位图句柄)

你不能 - 根本不能将源位图选入DC,即使它是你也无法找出什么DC。

要做你的副本,你可能想要使用类似的东西:

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

然后你可以从源到目标DC进行blit。

为我工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM