【问题标题】:Accessing GDI drawing context pixels directly直接访问 GDI 绘图上下文像素
【发布时间】:2013-02-01 20:19:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: winapi buffer gdi


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      使用GetObject to get the BITMAP struct,其中包含指向位图数据的指针。

      【讨论】:

        猜你喜欢
        • 2019-02-01
        • 2012-02-01
        • 2016-06-28
        • 2023-02-16
        • 1970-01-01
        • 1970-01-01
        • 2020-02-16
        • 1970-01-01
        • 2011-04-28
        相关资源
        最近更新 更多