Pixelfarbe in einem Spiel bestimmen
-
Hi,
ich wollte in einem uralt Spiel die Pixelfarbe an einer bestimmten Stelle auslesen.
Komischerweise erhalte ich sehr unterschiedliche Farbwerte, auch wenn sich dieses Pixel im Spiel nicht ändert.int get_low(int a) { a = a << 24; a = a >> 24; return a; } int get_high(int a) { a = a >> 8; return a; } int main() { Sleep(9000); fstream f; int x=1, y=1, i; int dx = GetSystemMetrics(SM_CXSCREEN); int dy = GetSystemMetrics(SM_CYSCREEN); BITMAPINFO info = {0}; info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); info.bmiHeader.biWidth = dx; info.bmiHeader.biHeight = dy; info.bmiHeader.biPlanes = 1; info.bmiHeader.biBitCount = 16; f.open("test.txt", ios::out); while(true) { Sleep(100); int tbytes = dx * dy; HBITMAP bitmap; int* memory; HDC hdc = GetWindowDC(0); bitmap = CreateDIBSection(hdc, &info, DIB_RGB_COLORS, (void**)&memory, 0, 0); HDC hdcMemory = CreateCompatibleDC(hdc); HGDIOBJ oldbitmap = SelectObject(hdcMemory, bitmap); BitBlt(hdcMemory, 0, 0, dx, dy, hdc, 0, 0, SRCCOPY); int fehler = BitBlt(hdcMemory, 0, 0, dx, dy, hdc, 0, 0, SRCCOPY); for (i=0; i<tbytes; i++) { { y = i / dx; x = i % dx; y = dy - y - 1; if ((x==736) && (y==564) && (fehler!=0)) { f << "Gefunden bei Auflösung: " << dx << " " << dy <<" An Position : " << x <<" "<< y <<" : " <<(((int)GetRValue( get_high(memory[i])))) << " " <<(((int)GetGValue( get_low(memory[i])))) << endl;; // << " " <<(((int)GetBValue( memory[i]))& 0xF8) << endl;// ("gefunden at %dx%d"), x, y); cout << "Gefunden bei Auflösung: " << dx << " " << dy <<" An Position : " << x <<" "<< y <<" : " <<(((int)GetRValue( get_high(memory[i])))) << " " <<(((int)GetGValue( get_low(memory[i])))) << endl;// << " " <<(((int)GetBValue( memory[i]))& 0xF8) << endl;// ("gefunden at %dx%d"), x, y); Beep(500,30); cout << GetLastError()<< endl; if (fehler==0) cout << "FEHLER!" << endl; } } } SelectObject(hdcMemory, oldbitmap); DeleteDC(hdcMemory); DeleteObject(bitmap); ReleaseDC(0, hdc); } return 0; }Beispielsweise erhalte ich folgende Werte:
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 20 255
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 0 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 4 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 12 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 12 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 12 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 4 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 12 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 20 255
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 16 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 20 255
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 20 255
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 45 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 24 255
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 16 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 12 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 4 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 4 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 12 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 12 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 20 255
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 41 0
Gefunden bei Auflösung: 1280 1024 An Position : 736 564 : 8 0Die beiden letzten Werte in einer Zeile sind die Farbwerte.
Was muß ich anders machen, damit es funktioniert?
-
Vielleicht GetPixel()?
-
Hast du dir denn die Bilder, die du erhältst, schon mal angesehen? Die werden deine Frage schon beantworten.
Und warum rufst du BitBlt zweimal hintereinander auf?
-
Hi, ich habe mir jetzt die Bilder dazu angeschaut.
Es fehlen auf einigen Bildern einige Spielelemente (Texturen).
Es sieht so aus, als ob diese nicht alle gezeichnet und dann angezeigt werden, sondern wohl nacheinander gezeichnet werden.Mit GetPixel() habe ich genau das gleiche Problem.
Wie kann ich das Problem lösen?