2012-06-22 3 views
4

게임의 특정 위치 (OpenGL 또는 DirectX), 타사 응용 프로그램 (내 게임이 아님)의 픽셀 색상을 읽고 싶습니다.게임에서 픽셀 읽기 (OpenGL 또는 DirectX)

나는 C#에서이 코드를 사용하여 데스크탑, 윈도우 등의 색상을 읽는 데 적합하지만 게임을 시작하면 검정색 픽셀 만 # 000000이됩니다. 나는 이것이 올바른 "위치"또는 그와 비슷한 것을 읽지 않기 때문이라고 생각합니다.

누군가이 작업 방법을 알고 있습니까? C#을 언급했지만 C/C++도 괜찮을 것입니다.

+0

현재 색상을 읽는 방법/사용중인 방법은 무엇입니까? Windows의 돋보기 접근성 도구를 사용할 때 비슷한 문제가 발생했기 때문에 바탕 화면과 다른 창은 제대로 표시되지만 Windows API를 우회하여 화면 (즉, 대부분의 게임)에 직접 그려지는 것이 빈/검은 색으로 표시됩니다. 오히려 오버레이에 직접적으로 그려지는 것이 올바른 용어 인 경우입니다. – JAB

+5

아, 여기 있습니다. 나는 해결책이 없지만 당신의 문제를 발견했다고 확신합니다. http://en.wikipedia.org/wiki/Hardware_overlay "하드웨어 오버레이 사용으로 인해 사용자가 PrtSc 키를 누를 때 활성화되는 스크린 샷 프로그램 (예 : Windows에 자동으로 내장 된 프로그램)은 종종 하드웨어 오버레이 윈도우에 나타나는 내용이 아니라 특수한 마스크 색상 만 포함하는 빈 영역이 캡처됩니다. " 따라서 DirectX와 OpenGL을 살펴보고 어떤 방법으로 사용할 수 있는지 알아야 할 것입니다. – JAB

답변

0

기본 단계 : 게임이 전체 화면 인 경우 적절한 OpenGL 또는 Directx 명령을 사용하여 렌더링 된 화면의 질감을 잡으십시오. 예를 들어 glReadPixels을 사용하면 현재 바인드 된 프레임 버퍼에서 창 상대 픽셀 좌표의 픽셀 값을 가져올 수 있습니다. 전체 화면이 아닌 경우 창 위치를 창 상대 픽셀 좌표와 결합해야합니다.

일부 느슨한 예 : Windows에서

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 */); 
0

즉 GDI (그래픽 장치 인터페이스)가 : GDI 사용하면 COLORREF color = GetPixel(dc, x, y);와 픽셀 값을 읽을 후 쉽게 HDC dc = GetDC(NULL);를 사용하여 장치 컨텍스트를 얻을 수 있습니다. 그러나주의 : 나중에 (프로그램의 모든 GetPixel 작업이 완료되면) ReleaseDC(NULL, dc);으로 장치 컨텍스트를 해제해야합니다. 그렇지 않으면 메모리가 누출됩니다. 자세한 내용은 here도 참조하십시오.

그러나 이와 같은 작업의 경우 다음을 사용하시기 바랍니다. Auto-it. &을 사용하는 것이 쉽고 간단합니다 (모든 작업은 그런 작업을 위해 설계된 것입니다).

Local $color = PixelGetColor(200, 300) 
MsgBox(0, "The color is ", $color) 
관련 문제