Получение цвета пикселей в C++
Я хотел бы получить значения RGB пикселя в разных координатах x, y на экране. Как я могу сделать это на C++?
Я пытаюсь создать свой собственный эффект размытия по Гауссу.
Это будет в Windows 7.
редактировать
какие библиотеки необходимо включить для этого?
что я собираюсь:
#include <iostream>
using namespace std ;
int main(){
HDC dc = GetDC(NULL);
COLORREF color = GetPixel(dc, 0, 0);
ReleaseDC(NULL, dc);
cout << color;
}
2 ответов
Как уже упоминалось в предыдущем посте, вы хотите метода getpixel функция из Win32 API.
GetPixel сидит внутри gdi32.dll, поэтому, если у вас есть правильная настройка среды, вы должны иметь возможность включать windows.h (включая wingdi.H) и вы должны быть золотыми.
Если у вас есть минимальная настройка среды по какой-либо причине, вы также можете использовать LoadLibrary на gdi32.dll напрямую.
первым параметром GetPixel является дескриптор контекст устройства, который можно получить, вызвав функцию GetDC(которая также доступна через <windows.h>
).
основной пример, который загружает GetPixel из dll и распечатывает цвет пикселя, где бы ни находился курсор, выглядит следующим образом.
#include<windows.h>
#include<stdio.h>
int main(int argc, char** argv)
{
FARPROC pGetPixel;
HINSTANCE _hGDI = LoadLibrary("gdi32.dll");
if(_hGDI)
{
pGetPixel = GetProcAddress(_hGDI, "GetPixel");
HDC _hdc = GetDC(NULL);
if(_hdc)
{
POINT _cursor;
GetCursorPos(&_cursor);
COLORREF _color = (*pGetPixel) (_hdc, _cursor.x, _cursor.y);
int _red = GetRValue(_color);
int _green = GetGValue(_color);
int _blue = GetBValue(_color);
printf("Red: 0x%02x\n", _red);
printf("Green: 0x%02x\n", _green);
printf("Blue: 0x%02x\n", _blue);
}
FreeLibrary(_hGDI);
}
return 0;
}
можно использовать GetDC
на NULL
окно, чтобы получить контекст устройства для всего экрана, и может следовать этому с вызовом GetPixel
:
HDC dc = GetDC(NULL);
COLORREF color = GetPixel(dc, x, y);
ReleaseDC(NULL, dc);
конечно, вы хотите только получить и освободить контекст устройства один раз, делая все чтение пикселей для эффективности.