0

我的操作系统是带有 2 个显示器的 windows 7 64 位。

我使用GetPixel(),但它总是返回CLR_INVALID这样的结果:

COLORREF result = GetPixel(dc,x,y);

我的GetDeviceCaps(RASTERCAPS)退货结果RC_BITBLT已启用。 GetDeviceCaps(COLORMGMTCAPS)返回结果是CM_GAMMA_RAMP

最重要的是,如果我SetPixel(dc,x,y,RGB(250,250,250))提前,然后GetPixel(dc,x,y),我总是可以像这样检索正确的结果:

COLORREF result = SetPixel(dc,x,y,RGB(250,250,250));
COLORREF cr = GetPixel(dc,x,y);

所以我觉得我的协调应该没问题。我不知道为什么GetPixel()总是 return CLR_INVALID,但SetPixel()总是运作良好?有什么建议么?

4

1 回答 1

1

来自GetPixel文档

必须在设备上下文中选择位图,否则会在所有像素上返回 CLR_INVALID。

试试下面的代码,看看它是否适用于您的设备环境。

HDC dc = ... // <-- your device context
HDC memDC = CreateCompatibleDC(dc);
HBITMAP memBM = CreateCompatibleBitmap(dc, 1, 1);
SelectObject(memDC, memBM);

int x = ... // point's coordinates
int y = ...
BitBlt(memDC, 0, 0, 1, 1, dc, x, y, SRCCOPY);

COLORREF cr = GetPixel(memDC, 0, 0);
std::cout << cr << std::endl;

DeleteDC(memDC);
DeleteObject(memBM);
于 2013-10-02T12:51:39.050 回答