현재 마우스 위치에서 픽셀 색상을 가져 오는 코드가 있습니다.
그것은 잘 작동하지만 유일한 문제는 내가
내가 몇 번을 시도 ... D3D 응용 프로그램에서 그것을 얻을 수 없다,하지만 그것은 단지 블랙 컬러만으로 얻을 -Directx 응용 프로그램의 Bitblt
레드 : 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);
}
}
감사합니다!
가 어떻게 어떤 종류의 알고 색상을 얻을 수있는 픽셀을 읽어 d3d? 내가 알고있는 것은 d3d9 ... –
d3d 응용 프로그램의 스크린 샷 (키보드의 인쇄 화면 키 사용)을 사용하는 것이 가장 쉬운 방법입니다. 스크린 샷이 비어 있으면 오버레이 표면입니다. – zdd
나는 시험을했다, 그것은 비어 있지 않았다. .. 나는 스크린 샷을 얻었다! 프런트 버퍼에 도달하는 데 도움이되는 예제 코드는 무엇입니까? 감사합니다. –