PDA

Voir la version complète : SDL, modifier un pixel...


TERMINABEN
20/07/2005, 15h14
Bonjour,

j'ai une question concernant les surfaces SDL.
Je crée une surface SDL, de 32x32 pixels, uniquement en 16 ou 24 bits, et je voudrais la remplir de pixels aléatoires.
Avant je disposais d'une fonction qui me permettait directement d'opérer un changement de couleur sur le pixel à l'aide des constantes RGB et des coordonnées du pixel.
Les coordonnées du pixel dans la surface n'est pas un probleme, mon probleme c'est comment changer la couleur du pixel ?
La structure SDL_Surface ne dit pas le type de donné qu'est un pixel, je sais juste que les pixels sont stoqués dans un tableau de dimension WidthxHeight, mais je connais pas son type :00000010:
Merci de méclairer!

ganlhi
20/07/2005, 15h17
je ne suis pas sur que ce soit très clair, mais j'ai une fonction pour colorer un pixel ça peut peut etre t'aider... :


void putPixel(SDL_Surface *surface,Uint16 x,Uint16 y,Uint32 color)
{
/* bpp de la surface ecran */
Uint8 bpp = surface->format->BytesPerPixel;

/* pointeur vers le pixel a remplacer */
Uint8 *p = ((Uint8 *)surface->pixels) + y * surface->pitch + x * bpp;

switch(bpp)
{
case 1:
*p = (Uint8) color;
break;
case 2:
*(Uint16 *)p = (Uint16) color;
break;
case 3:
if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
{
*(Uint16 *)p = ((color >> 8) & 0xff00) | ((color >> 8) & 0xff);
*(p + 2) = color & 0xff;
}
else
{
*(Uint16 *)p = color & 0xffff;
*(p + 2) = ((color >> 16) & 0xff) ;
}
break;
case 4:
*(Uint32 *)p = color;
break;
}
}

TERMINABEN
20/07/2005, 21h35
Ok bon en fait la structure SDL_Surface posede un pointeur de type void, d'apres ta source (merci beaucoup) c'est un type Uint32 qui spécifie la couleur du pixel.
Je vais m'en inspirer merci encore !! :00000023:

Ptival
20/07/2005, 22h07
Attention !

Si la surface que tu souhaites modifier est en VRAM, pense à faire un LockSurface avant la modification et un UnlockSurface après !

Mais pas dans une boucle, ces fonctions sont lentes ! Tu Lockes une fois la surface, tu modifies tous les pixels, tu Unlockes la surface.



Si la surface est en RAM par contre pas besoin :)