如何定义GetPixel的类型和/或我还缺少什么才能使用GetPixel?
#include <windows.h>
class PollPixelArray
{
public:
PollPixelArray(HDC hdcMonitor, LPRECT lprcMonitor);
unsigned long createHex(int r, int g, int b);
private:
PollPixelArray();
};
PollPixelArray::PollPixelArray(HDC hdcMonitor, LPRECT lprcMonitor)
{
GetPixel(hdcMonitor, 50, 100);
}
unsigned long createHex(int r, int g, int b){
return (((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff));
}
无论X坐标还是Y坐标,始终返回相同的无符号长整数/ DWORD / COLORREF。
while (tempX<40){
COLORREF tempREF = GetPixel(hdcMonitor, tempX, tempY); //COLORREF | unsigned long |
unsigned int dummy = GetRValue(tempREF);
std::cout << "RGB: " << ("%d", dummy);
dummy = GetGValue(tempREF);
std::cout << "," << ("%d", dummy);
dummy = GetBValue(tempREF);
std::cout << "," << ("%d", dummy);
std::cout << " at " << ("%d", tempX) << ", " << ("%d", tempY) << std::endl;
tempX++;
tempY++;
}
对于RGB值,循环总是返回255,255,255。
HDC回拨功能:
#include <windows.h>
#include "pollpixelarray.h"
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
PollPixelArray::PollPixelArray(hdcMonitor, lprcMonitor);
return true;
}
void main()
{
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, 0);
std::cin.get();
}
答案 0 :(得分:2)
这与typedef没有任何关系,GetPixel
正常工作。对于您观察到的行为,有几个合理的解释:
查看您的代码,两者都可能是这种情况,
hdc
EnumDisplayMonitors
参数的文档说:
如果此参数为NULL,则传递给回调函数的hdcMonitor参数将为NULL,感兴趣的可见区域是包含桌面上所有显示的虚拟屏幕。
GetPixel
的文档说:
如果像素位于当前剪切区域之外,则返回值为CLR_INVALID(Wingdi.h中定义的0xFFFFFFFF)。