我想直接从/向绘图上下文读取和写入像素,即在窗口上的绘画操作期间。
我知道Windows GDI中有GetPixel
/ SetPixel
个函数,但对于大型操作,能够直接读取和写入像素数据到内存会好得多。
如何使用标准GDI执行此操作?
答案 0 :(得分:3)
您可以创建兼容的DC,Bitmap:
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参数)获取图像的尺寸和格式。
答案 1 :(得分:1)
使用GetObject
to get the BITMAP
struct,其中包含指向位图数据的指针。