【问题标题】:Copying a bitmap from another HBITMAP从另一个 HBITMAP 复制位图
【发布时间】:2011-08-06 22:24:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ windows bitmap gdi atl


    【解决方案1】:

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

    要进行复制,您可能需要使用以下内容:

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

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

    【讨论】:

      【解决方案2】:

      为我工作:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-25
        • 1970-01-01
        • 2011-05-09
        • 2019-05-17
        • 2011-05-26
        • 1970-01-01
        • 2012-06-13
        相关资源
        最近更新 更多