Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1234 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Lire les pixels d'une SDL_Surface

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lire les pixels d'une SDL_Surface

n°1022497
Nico5779
Posté le 23-03-2005 à 17:29:26  profilanswer
 

Bonjour,
J'aimerais bien parvenir a interpreter les "pixels" (lire leur valeur rgb) d'une SDL_Surface, seulement y'as un truc que je comprend pas,  
Si par exemple j'ai obtenu ma surface via un LoadBMP , ben la tout va bien, mais j'essaye avec par exemple SDL_CreateRGBSurface, ou TTF_RenderText_Solid, ben la je ne lis que des 0 ou des 1  :??:  
exemple:
 
si je fais :  

Code :
  1. fond = SDL_LoadBMP("template.bmp" );
  2.     pix =static_cast<unsigned char *>(fond->pixels);
  3.     for(int df = 0;df < fond->w*fond->h*3;df++)
  4.     cout<<">>>"<<(int)pix[df]<<endl;


 
ben la pas de stress, j'ai bien les meme valeur rgb que dans la bmp, et si je fais:
 

Code :
  1. SDL_Color col;
  2. //...
  3. col.r=50;
  4. col.g=50;
  5. col.b=50;
  6. lcfont = TTF_OpenFont("./font/FreeMono.ttf", 14);
  7. if (!lcfont) fprintf(stderr, "Impossible de charger la police:%s\n", SDL_GetError());
  8. fond = TTF_RenderText_Solid(lcfont, "A",col);
  9.     pix =static_cast<unsigned char *>(fond->pixels);
  10.     for(int df = 0;df < fond->w*fond->h;df++)
  11.     cout<<">>>"<<(int)pix[df]<<endl;


 
Ben la, je voudrais lire des 50 la ou le texte apparait, et des zero ailleurs (vous voyez ce que je veux dire?) seulement, je n'ai que des zero et des "1" , et je comprend pas ce que ca represente? de plus on dirait que y'as pas autant de pixel que w*h, vu que dans le 2ème cas, si je met (df<fond->w*fond->h*3) comme condition du for, ca fait un seg fault.
Quelque peut il m'eclairer ?  :jap:

mood
Publicité
Posté le 23-03-2005 à 17:29:26  profilanswer
 

n°1022609
Nico5779
Posté le 23-03-2005 à 19:30:35  profilanswer
 

bon ok je crois que j'ai trouver,
grace a : http://sdldoc.csn.ul.ie/sdlpixelformat.php
 
apperement les 0 et 1 etaient des indices, tout simplement  :)

n°1022699
Evadream -​jbd-
Posté le 23-03-2005 à 21:22:33  profilanswer
 

TTF_RenderText_Solid t'a surement renvoyé une surface 8 bits utilisant une palette de couleurs (2 apparement).
 
Tu peux vérifier çà en regardant si fond->format->BitsPerPixel == 8. Si oui, tu peux aller jeter un oeil dans fond->format->palette :

Code :
  1. typedef struct{
  2.          int ncolors;
  3.          SDL_Color *colors;
  4.        } SDL_Palette;

Pour faire ce genre de parcour de buffer image comme tu fais, utilise une fonction getpixel qui se comporte différemment suivant le type de surface.
 
Dans ca cas, tu obtiens apparement une surface 8 bits, ce qui explique le fait que tu ais fond->w*fond->h valeurs et non pas fond->w*fond->h*3 (pour avoir les triplets RGB).
 
Tu peux écire les fonctions toi-même avec la doc ( http://sdldoc.csn.ul.ie/guidevideo.php#AEN112) ou bien utiliser SGE par exemple : http://www.digitalfanatics.org/cal/sge/ et sge_GetPixel (http://www.digitalfanatics.org/cal/sge/docs/pixels.html#sge_GetPixel)
 
Voilà, @+


Message édité par Evadream -jbd- le 23-03-2005 à 21:25:02
n°1022918
Nico5779
Posté le 23-03-2005 à 23:35:25  profilanswer
 

ok, merci d'avoir répondu, ca confirme ce que je pensait, et merci aussi pour ce complément d'informations.   :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Lire les pixels d'une SDL_Surface

 

Sujets relatifs
Comment lire un fichier aps...??Lire un fichier PDF
Lire un noued xmlComment lire une page aspx en local
Comment lire et modifier .cdb?lire un fichier wav
Lire un son avec SDLLib SDL
Comment ecrire/lire bit à bit dans un fichier en langage c/c++ ? 
Plus de sujets relatifs à : Lire les pixels d'une SDL_Surface


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR