gpt4 book ai didi

c++ - GetPixel 返回不正确的值

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

这是我在这个论坛上的第一篇帖子,如果我发错地方或者做错了,请不要责备我,我很少在论坛发帖。所以,我对 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

如果有人至少能以某种方式提供帮助或告诉我该做什么、该去哪里,我将非常非常感激。我开始编程的主要原因之一是因为像这样的东西,处理颜色、条件等……现在我不能再进步了,这真的很可悲。希望听到回复。谢谢。

最佳答案

这可能是 DPI 缩放的问题。

如果您的新显示器的每英寸点数高于平均水平,则 Windows 默认会拉伸(stretch)图形。默认情况下,Windows 假定程序忽略 DPI。如果 Windows 不拉伸(stretch)图形,那么不针对 DPI 进行调整的程序将在高密度显示器上的小窗口中显示小文本。

这有点hack。一些让您询问显示和窗口的 Windows API 和消息将在“平均”每英寸 96 像素与显示器的实际 DPI 之间转换坐标。同样,让您调整大小的 API 执行相反的转换。所以这对程序来说基本上是透明的。但这并不完美,因为并非所有 API 都能以一致的方式进行缩放。

所以我的猜测是您的笔记本电脑具有高分辨率显示屏,GetPixel 不会转换坐标以进行 DPI 缩放,并且鼠标位置 会转换为 DPI 缩放。结果是您要求的像素与鼠标并不真正对齐。

我建议的解决方案是告诉窗口您的程序是“DPI 感知的”。做这件事有很多种方法。在您的情况下,最简单的方法可能是调用 SetProcessDPIAware就在你的程序的开头。您也可以通过在 list 中标记您的程序来做到这一点。根据您使用的编译器,可能有一个命令行选项可以自动创建您需要的 list 。

关于c++ - GetPixel 返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678763/

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