我希望能够直接从/向绘图上下文中读写像素,即在窗口的绘制操作期间。
我知道 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 参数) 获取图像的尺寸和格式。