jts*_*imp 5 c++ windows gdi atl bitmap
我正在尝试编写一个类来包装程序中的位图功能.
一个有用的功能是从另一个位图句柄复制位图.我有点卡住了:
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 );
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码缺少一件事:如果我所有的源位图都是句柄(例如HBITMAP?),我如何才能将HDC送到源位图?
你可以在上面的代码中看到,我在BitBlt()调用中使用了"dcSource".但我不知道如何从源位图的句柄获取此dcSource(bmp.Handle()返回源位图句柄)
你不能 - 根本不能将源位图选入DC,即使它是你也无法找出什么DC.
要做你的副本,你可能想要使用类似的东西:
dcSrc = CreateCompatibleDC(NULL);
SelectObject(dcSrc, bmp);
Run Code Online (Sandbox Code Playgroud)
然后你可以从源到目标DC进行blit.
为我工作:
// hBmp is a HBITMAP
HBITMAP hBmpCopy= (HBITMAP) CopyImage(hBmp, IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6777 次 |
| 最近记录: |