Hallo Forum!
Ich suche mir das gerade schon die Finger blutig...
Gestern habe ich es mit
Hilfe aus dem Forum endlich hinbekommen, den Farbwert eines Pixels aus einem SDL-Surface auszulesen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Uint32 farbe = 0xff0000ff //rot in hex-Darstellung
SDL_LockSurface (s);
SDL_PixelFormat *format = s->format;
Uint32 p = getpixel(s, x, y);
SDL_GetRGBA(p, format, &r, &g, &b, &a);
SDL_UnlockSurface (s);
Uint32 ausgabe = SDL_MapRGBA(format, rc, gc, bc, ac);
//Ausgabe eingelesener Farbwert des Pixels, manuell auf "farbe" rot gesetzt.
cout << "Ausgabe: " << hex << ausgabe << endl;
//Ausgabe des manuell festgeleten Rots, auf dass das Pixel manuell gesetzt worden ist.
cout << "Farbe: " << hex << farbe << endl;
cout << "r: " << (int)rc << " g: " << (int)gc << " b: " << (int)bc << " alpha: " << (int)ac << endl;
|
Folgende Ausgabe erfolgt:
Ausgabe:
|
Quellcode
|
1
2
3
|
Ausgabe: f800
Farbe: ff0000ff
r: ff g: 0 b: 0 alpha: ff
|
Eigentlich müsste Ausgabe == Farbe sein, da beide Werte ein rot ergeben sollten. Tun sie aber nicht...
Wohingegen die Ausgabe der einzelnen Kanäle r, g, b und alpha noch in Ordnung sind. Erst nachdem ich Sie durch
SDL_MapRGBA geschickt habe, kommt da nur Käse raus.
Wo mache ich den Fehler? Wie bekomme ich wieder einen hex-basierten Farbwert aus den eingelesenen r, g, b und a Kanälen?
Danke für eure Hilfe!