直接访问GDI绘制上下文像素

时间:2013-02-17 06:55:54

标签: winapi buffer gdi hdc

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

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

如何使用标准GDI执行此操作?

2 个答案:

答案 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,其中包含指向位图数据的指针。