Это мой первый пост на этом форуме, пожалуйста, не беспокойтесь, если я не разместил его в нужном месте или не сделал что-то не так, я не публикую на форумах очень много. Итак, у меня есть эта проблема с функцией GetPixel. В принципе, он должен возвращать десятичное значение цвета в x, y. Код, который я собираюсь опубликовать, отлично работает на Windows 7 32bit, но недавно я купил новый ноутбук y50-70 с окнами 8.1 64 бит и тот же код работает совершенно по-другому. Я не могу найти решение проблемы, не могу даже описать ее. Я думаю, что это могло бы иметь что-то общее с дескриптором десктопа, HDC, GetDC(), GetPixel(), возможно даже с разрешением компьютера, частотой обновления или что-то в этом роде ... Я даже записал несколько видеороликов, которые могли бы помочь вам понять проблема у меня, потому что я не могу даже описать ее правильно. Это похоже на реальный цвет: x = 219, y = 407 от места, куда указывает моя мышь. Новый ноутбук 3 недели, я даже пытался сделать восстановление системы 1 раз, но это не решило проблему.GetPixel возвращает неправильные значения
Вы можете использовать этот код, надеюсь, что он будет хорошо работать для вас:
#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
Если кто-то мог по крайней мере, как-то помочь или сказать, что делать, куда идти, я бы очень, очень его умиротворил. Одна из основных причин, почему я начал программировать, - это что-то вроде этого, работа с цветами, условиями и т. Д. ... и теперь я не могу продвинуться дальше, что действительно грустно. Надеюсь услышать ответ. Спасибо.
Я не думаю, что это проблема, но вы должны удалить «GetDC» извне цикла и переместить «ReleaseDC» в цикл. –
Спасибо. Я добавлю ReleaseDC к циклу, и причина, по которой я добавил GetDC снаружи, был потому, что он был неопределенным, используя VisualStudio 2013, но это не решение основной проблемы. –