SDL Farbenkonvertiertung
-
Hi,
ich habe eine Surface mit einem Bild nun möchte ich das jede Stelle die den Wert (255,255,255) hat, (0,0,0) wird, wie bewerkstellige ich das mit SDL??mfg
DKing
-
Willst du nur Weiß mit Schwarz ersetzten, oder willst du, dass der Bereich nicht gezeichnet wird?
Wenn du willst, dass eine Farbei nicht gezeichnet wird, dann geht das mit SDL_SetColorKey.
Wenn du eine Farbe mit einer anderen ersetzten willst, dann veränderst du die Daten, auf die pixels in deinem SDL_Surface zeigt. Mit SDL_GetRGB und SDL_MapRGB kannst du rausfinden, welche Werte du ersetzten musst.
-
Oh je, du scheinst Ahnung davon zu haben, kannst du mal nen ganz kleines Beispiel zeigen, wie man z.B. aus jedem R Wert R-20 z.b. macht. Also R verkleinert? Die Doku ist für mich an dieser Stelle kryptisch.
-
ungetestet:
SDL_Surface* bild; Uint8 r, g, b; SDL_LockSurface (bild); for (int i = 0; i < bild->w * bild->h; i++) { // RGB Werte auslesen SDL_GetRGB (bild->pixels[i], bild->format, &r, &b, &g); // r auf 20 setzen r = 20; // Pixel speichern bild->pixels[i] = SDL_MapRGB(bild->format, r, g, b); } SDL_UnlockSurface (bild);
-
Hi,
erstmal Danke für die Hilfe,
leider kommt bei:bild->pixels[i]eine Fehlermeldung :(. Aber dank deinem Code weiß ich jetzt, wie es theoretisch funktioniert, das war mir vorher schleiherhaft :).
Aber was ist an blobby1->pixels[i] falsch, nach der Doku würde ich das an dieser Stelle genau so tun.Debug Dialog:
error C2036: 'void *' : unknown size
error C2664: 'SDL_GetRGB' : cannot convert parameter 1 from 'void' to 'unsigned __int32'
error C2036: 'void *' : unknown size
error C2120: 'void' illegal with all types
-
müsse man nicht
SDL_Surface* bild; Uint8 r, g, b; SDL_LockSurface (bild); for (int i = 0; i < bild->w * bild->h * image->format->BytesPerPixel ; i += image->format->BytesPerPixel) { // RGB Werte auslesen SDL_GetRGB (*(Uint32*)bild->pixels + i, bild->format, &r, &b, &g); // r auf 20 setzen r = 20; // Pixel speichern *((Uint32*)bild->pixels+i) = SDL_MapRGB(bild->format, r, g, b); } SDL_UnlockSurface (bild);
-
Dann kommt eine Popupfehlermeldung:
First-chance exception in Blobby Volley 2.exe (SDL.DLL): 0xC0000005: Access Violation.Es liegt definitiv am Code

image habe ich gegen bild ausgetauscht, war falsch