如何从 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

或者,您可以创建一个具有所需尺寸和颜色深度的新 HBITMAPSelectObject() 将其放入新内存 HDC,然后 BitBlt()/StretchBlt()源码HDC进去.

无论哪种方式,一旦您有了 HBITMAP,您就可以使用 Bitmap(HBITMAP, HPALETTE) constructor or Bitmap::FromHBITMAP() 方法从中创建一个新的 GDI+ Bitmap