4

我想直接从/向绘图上下文读取和写入像素,即在窗口上的绘制操作期间。

我知道 Windows GDI 中有GetPixel/SetPixel函数,但是对于大型操作,能够直接将像素数据读取和写入内存会好得多。

如何使用标准 GDI 做到这一点?

4

2 回答 2

3

您可以创建一个兼容的 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 参数)获取图像的尺寸和格式。

于 2013-02-17T07:41:26.853 回答
1

用于GetObject获取BITMAP包含指向位图数据的指针的结构。

于 2013-02-17T07:57:19.583 回答