【发布时间】:2013-02-01 20:19:37
【问题描述】:
我想直接从/向绘图上下文读取和写入像素,即在窗口上的绘制操作期间。
我知道 Windows GDI 中有 GetPixel/SetPixel 函数,但是对于大型操作,能够直接将像素数据读写到内存中会好得多。
如何使用标准 GDI 做到这一点?
【问题讨论】:
我想直接从/向绘图上下文读取和写入像素,即在窗口上的绘制操作期间。
我知道 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 to get the BITMAP struct,其中包含指向位图数据的指针。
【讨论】: