0

私のピクセルグラバー(オンラインソースから変更しました)しかし、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);
            }
        }

    }





}
4

1 に答える 1

1

無意味なオフセットでビットマップ ポインターを逆参照しています。私はビットマップ ファイル形式にあまり詳しくありませんが、おそらく次のようなものが必要になるでしょう。

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];

現在、一番上の行のみに対処します。

于 2013-08-20T11:03:46.800 に答える