我想在屏幕上的不同x,y坐标下获得像素的RGB值。
我将如何在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;

}

最佳答案

如前一篇文章所述,您需要Win32 API中的GetPixel函数。
GetPixel位于gdi32.dll中,因此,如果您具有正确的环境设置,则应该可以包含windows.h(其中包括wingdi.h),并且应该很漂亮。
如果出于某种原因需要最小的环境设置,则也可以直接在gdi32.dll上使用LoadLibrary。
GetPixel的第一个参数是设备上下文的句柄,可以通过调用GetDC函数(也可以通过<windows.h>获得)来检索该句柄。
一个从dll加载GetPixel并打印出当前光标位置的像素颜色的基本示例如下。

#include<windows.h>
#include<stdio.h>

typedef WINAPI COLORREF (*GETPIXEL)(HDC, int, int);

int main(int argc, char** argv)
{

    HINSTANCE _hGDI = LoadLibrary("gdi32.dll");
    if(_hGDI)
    {
        while(true) {
            GETPIXEL pGetPixel = (GETPIXEL)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;
}

10-02 01:02