Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;像素抓取器错误的RGB值_C++_Windows_Colors_Rgb - Fatal编程技术网

C++ C++;像素抓取器错误的RGB值

C++ C++;像素抓取器错误的RGB值,c++,windows,colors,rgb,C++,Windows,Colors,Rgb,我的像素抓取器(我从在线来源修改过),但RGB值已关闭。。谁能看看这个,也许能修好 我试图从屏幕上抓取所有像素,并尽可能快地将值转换为RGB #include "iostream" #include <Windows.h> using namespace std; HDC hdc, hdcTemp; int x, y; void PixelFunction(); // Get the pixel rgb function int main() { PixelFun

我的像素抓取器(我从在线来源修改过),但RGB值已关闭。。谁能看看这个,也许能修好

我试图从屏幕上抓取所有像素,并尽可能快地将值转换为RGB

#include "iostream"
#include <Windows.h>
using namespace std;

HDC hdc, hdcTemp;
int x, y;


void PixelFunction();   // Get the pixel rgb function

int main()
{
    PixelFunction();
    ReleaseDC(HWND_DESKTOP, hdc);
    cout<<"done";
    getchar();
    return 0;
}


void PixelFunction()
{
    BYTE* bitPointer;
    int red, green, blue, alpha;

    hdc = GetDC(HWND_DESKTOP);
    int MAX_WIDTH = GetDeviceCaps(hdc, HORZRES);
    int MAX_HEIGHT = GetDeviceCaps(hdc, VERTRES);

    hdcTemp = CreateCompatibleDC(hdc);
    BITMAPINFO bitmap;
    bitmap.bmiHeader.biSize = sizeof(bitmap.bmiHeader);
    bitmap.bmiHeader.biWidth = MAX_WIDTH;
    bitmap.bmiHeader.biHeight = MAX_HEIGHT;
    bitmap.bmiHeader.biPlanes = 1;
    bitmap.bmiHeader.biBitCount = 32;
    bitmap.bmiHeader.biCompression = BI_RGB;
    bitmap.bmiHeader.biSizeImage = MAX_WIDTH * 4 * MAX_HEIGHT;
    bitmap.bmiHeader.biClrUsed = 0;
    bitmap.bmiHeader.biClrImportant = 0;
    HBITMAP hBitmap2 = CreateDIBSection(hdcTemp, &bitmap, DIB_RGB_COLORS, (void**)(&bitPointer), NULL, NULL);
    SelectObject(hdcTemp, hBitmap2);
    BitBlt(hdcTemp, 0, 0, MAX_WIDTH, MAX_HEIGHT, hdc, 0, 0, SRCCOPY);
    for (int i=0; i<MAX_HEIGHT; i ++)
    {
        for (int ii=0; ii<MAX_WIDTH; ii++)
        {

            {
                blue = (int)bitPointer[ii];
                green = (int)bitPointer[ii+1];
                red = (int)bitPointer[ii+2];
                alpha = (int)bitPointer[ii+3];

                cout << "Red " << red << ".\n";
                cout << "Green " << green << ".\n";
                cout << "Blue " << blue << ".\n";
                SetCursorPos(ii, i);

                Sleep(500);
            }
        }

    }





}
#包括“iostream”
#包括
使用名称空间std;
HDC-HDC,hdcTemp;
int x,y;
无效像素函数();//获取像素rgb函数
int main()
{
像素函数();
ReleaseDC(HWND_桌面,hdc);

cout您正在使用无意义的偏移取消对位图指针的引用。 我对位图文件格式不是很熟悉,但您可能需要以下内容:

blue = (int)bitPointer[i*MAX_WIDTH + ii];
green = (int)bitPointer[i*MAX_WIDTH + ii + 1];
red = (int)bitPointer[i*MAX_WIDTH + ii + 2];
alpha = (int)bitPointer[i*MAX_WIDTH + ii + 3];

当前,您将只能寻址最上面一行。

关闭意味着,您得到了什么输出。当我尝试执行代码时,我得到了红色25.绿色65.蓝色165。我添加了一个小鼠标代码,以便它能够按照计算的像素跟随我的鼠标,并且它们已关闭:/完全关闭。您看到有什么问题吗,(你可以用画图轻松测试RGB)你使用的是32位位图,因此你可以简单地使用
RGBQUAD
结构指针,而不是逐字节访问“位”。你能写代码吗?你的内部循环什么都不做。没有什么取决于
ii