如何从 hdc 获取位图?
How to get a bitmap from a hdc?
我可以像这样将 hbitmap
加载到 hdc 中:
Gdiplus::Color Color{ 255, 255, 255 };
hBitmap = NULL;
Gdiplus::Bitmap* bitmap = Gdiplus::Bitmap::FromFile(L"home.png", false);
if (bitmap)
{
bitmap->GetHBITMAP(Color, &hBitmap);
delete bitmap;
}
BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
HDC hDCMem = CreateCompatibleDC(NULL);
HBITMAP hBitmapOld = (HBITMAP)SelectObject(hDCMem, hBitmap);
我如何做相反的事情,取回加载到特定 hdc
中的位图?
我需要先检索 hbitmap
然后从中检索 bitmap
吗?怎么样?
您可以使用 GetCurrentObject()
访问当前选择的 HBITMAP
(和 HPALETTE
)到 HDC
。
或者,您可以创建一个具有所需尺寸和颜色深度的新 HBITMAP
,SelectObject()
将其放入新内存 HDC
,然后 BitBlt()
/StretchBlt()
源码HDC
进去.
无论哪种方式,一旦您有了 HBITMAP
,您就可以使用 Bitmap(HBITMAP, HPALETTE)
constructor or Bitmap::FromHBITMAP()
方法从中创建一个新的 GDI+ Bitmap
。
我可以像这样将 hbitmap
加载到 hdc 中:
Gdiplus::Color Color{ 255, 255, 255 };
hBitmap = NULL;
Gdiplus::Bitmap* bitmap = Gdiplus::Bitmap::FromFile(L"home.png", false);
if (bitmap)
{
bitmap->GetHBITMAP(Color, &hBitmap);
delete bitmap;
}
BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
HDC hDCMem = CreateCompatibleDC(NULL);
HBITMAP hBitmapOld = (HBITMAP)SelectObject(hDCMem, hBitmap);
我如何做相反的事情,取回加载到特定 hdc
中的位图?
我需要先检索 hbitmap
然后从中检索 bitmap
吗?怎么样?
您可以使用 GetCurrentObject()
访问当前选择的 HBITMAP
(和 HPALETTE
)到 HDC
。
或者,您可以创建一个具有所需尺寸和颜色深度的新 HBITMAP
,SelectObject()
将其放入新内存 HDC
,然后 BitBlt()
/StretchBlt()
源码HDC
进去.
无论哪种方式,一旦您有了 HBITMAP
,您就可以使用 Bitmap(HBITMAP, HPALETTE)
constructor or Bitmap::FromHBITMAP()
方法从中创建一个新的 GDI+ Bitmap
。