gpt4 book ai didi

c++ - 如何从窗口获取像素数据\像素缓冲区并提取RGB?

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:58 24 4
gpt4 key购买 nike

我正在窗口上绘制文本 (textOut) 和矩形...我想从中获取 RGB 缓冲区...我该怎么做?

最佳答案

有两种选择:

首先,您可以使用 GetPixel()。我用了很多。它工作正常:

COLORREF GetPixel(
HDC hdc,
int nXPos,
int nYPos
);

如今,在某些情况下,处理器甚至可以使用此函数拾取一个矩形。

其次,您可以将屏幕内容复制到位图中。之后你可以将它放入剪贴板,处理你的代码等。核心功能是:

BOOL BitBlt(
_In_ HDC hdcDest,
_In_ int nXDest,
_In_ int nYDest,
_In_ int nWidth,
_In_ int nHeight,
_In_ HDC hdcSrc,
_In_ int nXSrc,
_In_ int nYSrc,
_In_ DWORD dwRop
);

如果需要,我可以发布更详细的片段。

// Pick up the DC.
HDC hDC = ::GetDC(m_control);

// Pick up the second DC.
HDC hDCMem = ::CreateCompatibleDC(hDC);

// Create the in memory bitmap.
HBITMAP hBitmap = ::CreateCompatibleBitmap(hDC, bmp_size_x, bmp_size_y);

// Put bitmat into the memory DC. This will make it functional.
HBITMAP hBmpOld = (HBITMAP)::SelectObject(hDCMem, hBitmap);

// Clear the background.
HBRUSH hBkgr = ::CreateSolidBrush(props.bkgr_brush);
RECT bitmap_rect = { 0, 0, bmp_size_x, bmp_size_y };
::FillRect(hDCMem, &bitmap_rect, hBkgr);
::DeleteObject(hBkgr);

// Do the job.
::BitBlt(hDCMem, margins_rect.left, margins_rect.top,
size_to_copy_x, size_to_copy_y, hDC,
screen_from_x, screen_from_y, SRCCOPY);

关于c++ - 如何从窗口获取像素数据\像素缓冲区并提取RGB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13335113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com