我想直接从/向绘图上下文读取和写入像素,即在窗口上的绘制操作期间。
我知道 Windows GDI 中有GetPixel
/SetPixel
函数,但是对于大型操作,能够直接将像素数据读取和写入内存会好得多。
如何使用标准 GDI 做到这一点?
您可以创建一个兼容的 DC,位图:
HDC hMemDC = CreateCompatibleDC(hdc);
HBITMAP hBmp = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);
SelectObject(hMemDC, hBmp);
接下来,您可以使用GetDIBits函数来获取位:
int GetDIBits(
_In_ HDC hdc,
_In_ HBITMAP hbmp,
_In_ UINT uStartScan,
_In_ UINT cScanLines,
_Out_ LPVOID lpvBits,
_Inout_ LPBITMAPINFO lpbi,
_In_ UINT uUsage
);
注意:您可能需要将 lpvBits 设置为 NULL 以通过 BITMAPINFO(lpbi 参数)获取图像的尺寸和格式。
用于GetObject
获取BITMAP
包含指向位图数据的指针的结构。