4

サードパーティのアプリケーション(これは私のゲームではありません)によって、ゲーム内の特定の位置(OpenGLまたはDirectXなど)のピクセルの色を読み取りたいです。

C#で試してみましたが、コードはデスクトップやウィンドウなどの色を読み取るのに最適ですが、ゲームを起動すると、黒いピクセルである#000000しか表示されません。正しい「場所」などで読まなかったからだと思います。

誰かがこれを行う方法を知っていますか?C#について説明しましたが、C /C++でも問題ありません。

4

2 に答える 2

0

基本的な手順:ゲームがフルスクリーンの場合は、適切なOpenGLまたはDirectxコマンドを使用して、レンダリングされた画面のテクスチャを取得します。たとえば、glReadPixelsを使用すると、現在バインドされているフレームバッファからウィンドウの相対ピクセル座標でピクセル値を取得できます。フルスクリーンでない場合は、ウィンドウの位置とウィンドウの相対的なピクセル座標を組み合わせる必要があります。

いくつかの緩い例:

glBindFramebuffer(GL_FRAMEBUFFER, yourScreenFramebuffer);
glReadPixels(/* your pixel X, your pixel Y, GLsizei width, 1 pixel wide, 1 pixel tall, GL_RGBA or GL_RGB, GL_UNSIGNED_BYTE, *where to store your pixel value */);
于 2013-03-07T10:41:29.577 に答える
0

Windowsには、GDI(Graphics Device Interface)があります。GDIを使用すると、を使用してデバイスコンテキストを簡単に取得し、を使用してHDC dc = GetDC(NULL);ピクセル値を読み取ることができますCOLORREF color = GetPixel(dc, x, y);。ただし、注意してください。後で(プログラムのすべてのGetPixel操作が終了したときに)デバイスコンテキストを解放する必要がありますReleaseDC(NULL, dc);。そうしないと、メモリがリークします。詳細については、こちらもご覧ください。

ただし、このようなタスクの場合は、Auto-itを使用することをお勧めします。それは簡単で、使いやすく、そしてかなり簡単です(結局のところ、それはそのような操作のために設計されているだけです)。

Local $color = PixelGetColor(200, 300)
MsgBox(0, "The color is ", $color )
于 2013-03-07T13:02:04.373 に答える