从另一个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 );
}
}
这段代码缺少一件事:我怎么能得到一个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);
相关文章:
- C / C++ 移位/偏移/向左或向右移动位图?
- 如何在快板的屏幕中显示子位图的绘制?
- CreateDIBSection为同一图像返回不一致的位图位值
- C++ 位图中的 ttc 字体
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 难以从 CImageList 设置菜单项位图
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 如何使用 freetype2 访问单色位图中的像素状态
- 将位图 (bmp) 转换为具有透明度的 png (Windows c++)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 位图到垫子/2D 数组
- Gdiplus位图没有Alpha通道
- 如何从路径字符串加载Gdiplus::位图
- 在C++中使用Gdiplus创建透明位图
- 用C++压缩内存中的位图
- 另一个从剪贴板线程绘制位图
- 将两个Gdiplus::位图合并为一个c++
- 如何读取一个大的位图图像的大小
- 我如何使用一个屏幕外的DC渲染位图的编译一次
- 在JNI中创建一个带有像素数据的新位图