SDL Kleuren vergelijking

Status
Niet open voor verdere reacties.

erikiej1

Gebruiker
Lid geworden
29 apr 2008
Berichten
138
Ik heb al een tijd lang een klein spel zitten maken met behulp van de Allegro library. Ik ben er achter gekomen dat die, hoewel gebruikersvriendelijk, erg sloom is. Daarom ben ik overgestapt naar SDL. Ik ben op het volgende probleempje gestuit: in Allegro had ik 'colorcomparison' (bv. if( getpixel(b,x,y) == makecol(0,0,0) { ... } ) maar ik kan dit niet in SDL omzetten. Ik had op internet de volgende getpixel() gevonden, want die zit niet inbegrepen in de SDL library:

Code:
   Uint32 getpixel(SDL_Surface *surface, int x, int y)
   {
       int bpp = surface->format->BytesPerPixel;

       Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
   
       switch (bpp) {
       case 1:
           return *p;
   
       case 2:
           return *(Uint16 *)p;
  
       case 3:
           if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
               return p[0] << 16 | p[1] << 8 | p[2];
           else
               return p[0] | p[1] << 8 | p[2] << 16;
   
       case 4:
           return *(Uint32 *)p;
   
       default:
           return 0; 
       } 
   }

Ik heb geprobeerd de vergelijking

Code:
if( getpixel( screen, x, y ) == SDL_MapRGB( f1, f2, f3 ) ) {...}

Maar die returnt, zo bleek daarna, altijd true, ook al waren het compleet andere kleuren.

Is er een andere manier? Helpmij, s.v.p.

Vriendelijke groet en bij voorbaat dank, Erik.
 
Ik betwijfel of je getPixel functie correct is.

Van wat ik kan vinden op de libSDL wiki, zou je best eens kijken naar SDL_PixelFormat
eventueel zou SDL_GetRGB ook nuttig kunnen zijn
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan