【发布时间】:2021-02-10 22:37:02
【问题描述】:
这是我在这个论坛上的第一个帖子,如果我没有在正确的地方发布它或者我做错了什么,请不要对我苛刻,我很少在论坛上发帖。所以,我对 GetPixel 函数有这个问题。基本上,它应该返回 x, y 处的颜色小数。我即将发布的代码在 Windows 7 32 位上完美运行,但最近我买了一台新的笔记本电脑 y50-70 和 Windows 8.1 64 位,相同的代码工作方式完全不同。我找不到任何解决问题的方法,甚至无法描述它。我认为这可能与桌面手柄、HDC、GetDC()、GetPixel() 有关,甚至可能与我的计算机分辨率、刷新率或类似的东西有关……我什至录制了一些视频,可以帮助您了解我遇到的问题是因为我什至无法正确描述它。这就像真正的颜色是 x = 219, y = 407 远离我的鼠标指向的地方。新笔记本电脑用了 3 周,我什至尝试过 1 次系统还原,但并没有解决问题。
请随意使用此代码,希望它对您有用:
#include <iostream>
#include <Windows.h>
using namespace std;
void Detect();
int main()
{
Detect();
return 0;
}
void Detect()
{
POINT p;
HDC hDC = GetDC(0);
int x, y;
while (!GetAsyncKeyState(VK_INSERT)) // Press insert to stop
{
GetCursorPos(&p);
x = p.x;
y = p.y;
hDC = GetDC(0);
cout << x << " " << y << " " << GetPixel(hDC, x, y) << endl;
Sleep(50);
}
ReleaseDC(0, hDC);
}
以下问题的链接: https://youtu.be/q2H2M8WLHVI https://youtu.be/UcneHwXaGoM
如果有人至少能以某种方式提供帮助或告诉我该做什么、该去哪里,我会非常非常感激它。我开始编程的主要原因之一是因为这样的事情,使用颜色,条件等......现在我无法进一步前进,这真的很伤心。希望听到答复。谢谢。
【问题讨论】:
-
我不认为这是问题所在,但是您应该从循环外部删除
GetDC并将ReleaseDC移动到循环中。 -
谢谢。我将ReleaseDC添加到循环中,我在外面添加GetDC的原因是因为它是未定义的,使用VisualStudio 2013,但这不是主要问题的解决方案。