Получение цвета пикселя в C ++ - PullRequest
7 голосов
/ 30 января 2011

Я хотел бы получить значения 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 ]

13 голосов
/ 30 января 2011

Вы можете использовать GetDC в окне NULL, чтобы получить контекст устройства для всего экрана, и можете выполнить вызов GetPixel:

HDC dc = GetDC(NULL);
COLORREF color = GetPixel(dc, x, y);
ReleaseDC(NULL, dc);

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

7 голосов
/ 30 января 2011

Как упоминалось в предыдущем посте, вам нужна функция 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;
}
...