0

現在のマウス位置からピクセルの色を取得するコードを取得しました。
うまく動作しますが、唯一の問題は、d3d アプリケーションから取得できないことです...
何度か試してみましたが、黒色しか取得できません -

赤: 0
緑: 0
青: 0

ここに私のコードがあります -

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

HWND hWindow;

HDC hScreen;
HDC hdcMem;
HBITMAP hBitmap;
HGDIOBJ hOld;

int sX, sY, x, y;

BYTE* sData = 0;

POINT cursorPos;

int main()
{
    int Red, Green, Blue;

    hScreen = GetDC(hWindow);

    sX = GetDeviceCaps(hScreen, HORZRES);
    sY = GetDeviceCaps(hScreen, VERTRES);

    hdcMem = CreateCompatibleDC (hScreen);
    hBitmap = CreateCompatibleBitmap(hScreen, sX, sY);

    BITMAPINFOHEADER bm = {0};
    bm.biSize = sizeof(BITMAPINFOHEADER);
    bm.biPlanes = 1;
    bm.biBitCount = 32;
    bm.biWidth = sX;
    bm.biHeight = -sY;
    bm.biCompression = BI_RGB;
    bm.biSizeImage = 0; // 3 * sX * sY;

    while (1) {
        hOld = SelectObject(hdcMem, hBitmap);
        BitBlt(hdcMem, 0, 0, sX, sY, hScreen, 0, 0, SRCCOPY);
        SelectObject(hdcMem, hOld);

        free(sData);
        sData = (BYTE*)malloc(4 * sX * sY);

        GetDIBits(hdcMem, hBitmap, 0, sY, sData, (BITMAPINFO*)&bm, DIB_RGB_COLORS);

        GetCursorPos(&cursorPos);
        x = cursorPos.x;
        y = cursorPos.y;

        Red = sData[4 * ( (y * sX) + x) +2];
        Green = sData[4 * ( ( y * sX) + x) +1];
        Blue = sData[4 * ( (y * sX) + x)];

        printf("\nRed: %d\nGreen: %d\nBlue: %d\n", Red, Green, Blue);
        Sleep(300);
    }
}

ありがとう!

4

1 に答える 1

0

どの種類の d3d アプリケーションを使用していますか? アプリケーションがオーバーレイ サーフェスを使用している場合、上記のコードでは何も取得できません。オーバーレイ サーフェスは、ビデオ プレーヤーで広く使用されています。DirectX の通常のサーフェスとはまったく異なります。通常のスクリーン ショット ソフトウェアは、プライマリ サーフェスからのみデータを取得できます。Microsoft は、オーバーレイ サーフェスからデータを取得するためのパブリック インターフェイスを提供していませんが、一部のソフトウェアは最も一般的な方法は DirectX をフックすることですが、それは別のトピックです。

d3d アプリケーションがオーバーレイ サーフェスを使用していない場合は、DiretX を使用して画面からデータを取得し、必要な画面データからピクセルを取得できます。

  1. CreateOffscreenPlainSurface を使用してオフスクリーン サーフェスを作成する
  2. 画面からデータを取得するには、GetFrontBufferData を使用します。
  3. 表面をロックし、ピクセルを読み取って色を取得します
于 2013-07-02T02:40:54.177 に答える