Получение цвета пикселей в 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);

конечно, вы хотите только получить и освободить контекст устройства один раз, делая все чтение пикселей для эффективности.