begin process at 2012 05 29 20:23:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

OpenGL

 > 

probleme avec la recuperation de la couleur d'un pixel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme avec la recuperation de la couleur d'un pixel

dimanche 15 janvier 2006 à 18:32:06 | probleme avec la recuperation de la couleur d'un pixel

Alucards


salut ,

voila j'ai un loader de texture bmp/tga/pcx/jpg qui fonctionne nikel.
j'arrive a charger mes textures et les afficher.
une fois charger elles sont sous la forme d'un

unsigned char* imagedata[ width * height  * conposant];

je voudrait recuperer la valeur R G B de chaque pixel et la stoker dans un tableau a 2 dimension :

rgb Img [ height][ width] ;

je connais height width j'ai donc pu creer mon tableau a 2D dynamiquement.

etj'ai un  code du type :

for ( int i = 0; i < height; i++)
{
    for ( int j =0; j < width; j++)
    {
       rgb color = GetPixelColor(i,j);
       Img[i][j].r = color.r;
       Img[i][j].g = color.g;
       Img[i][j].b = color.b;
    }
}

bref mon probleme se situe dans la fonction GetPixelColor(i,j) ou il faut creer un index pour parcourir le tableau a 1 dimension et le faire correspondre au tableau a 2d voila

si quelqu'un peut m'aider ca serait sympa merci d'avance
Tous les chemins mènent au RHUM !!!!!!!!!!!!!!!!!!!..............................
dimanche 15 janvier 2006 à 20:43:46 | Re : probleme avec la recuperation de la couleur d'un pixel

patatalo

Membre Club Administrateur CodeS-SourceS
salut, je suis pas sur d'avoir bien compris ta question mais pour rajouter un index ne suffit-t-il pas de rajouter une variable ? int k = 0; for ( int i = 0; i < height; i++) { for ( int j =0; j < width; j++) { rgb color = GetPixelColor(i,j); Img[i][j].r = color.r; Img[i][j].g = color.g; Img[i][j].b = color.b; k++; } } @++
dimanche 15 janvier 2006 à 22:32:57 | Re : probleme avec la recuperation de la couleur d'un pixel

Alucards

ben en fait ma texture une fois chargée est sous forme d'un unsigned char* imagedata[width * height * bitparpixel];

bref je doit fabriquer un index pour parcourir mon imagedata lire mes 3 donnees RGB et les stoker dans un tableau a 2 dimension:

j'ai coder ceci mais je suis pas tres sur car je sais pas comment se decode ma texture une fois chargee ( c a d si on lit d'abord la premiere ligne puis les autres ou alors la premiere colonne et les autres)

unsigned char * ptr;
for ( int i = 0; i < height; i++)
{
    for ( int j =0; j < width; j++)
    {
       int index = 3 * ( j + i * width); // je multiplie par 3 car je lis les donées 3 par 3 (RGB)

       ptr = imagedata[index];
       Img[i][j].r = ptr[0];
       Img[i][j].g = ptr[1];
       Img[i][j].b = ptr[2];
      
    }
}

je bosse sur un systeme de heightmap avec image en niveaux de gris ou l'altitude d'un point est calculer en fonction du niveau de gris du pixel ; et pour ca j'ai besoin de connaitre la valeur RGB de chaque pixel de mon imagedata et comment la parcourir voila

Tous les chemins mènent au RHUM !!!!!!!!!!!!!!!!!!!..............................
dimanche 15 janvier 2006 à 22:36:21 | Re : probleme avec la recuperation de la couleur d'un pixel

Alucards

donc j'ai fait un test avec une image uni color et a mon plus grand desarroi il y a des altitudes ca me creer des montagnes et tout le tralala alors que ca devrait etre plat

je comprend pas pkoi

Tous les chemins mènent au RHUM !!!!!!!!!!!!!!!!!!!..............................
lundi 16 janvier 2006 à 11:01:43 | Re : probleme avec la recuperation de la couleur d'un pixel

mondrone

Membre Club
Si j'ai bien compris ton problème, tu trouve dans ton tableau imagedata[] les données présentées en série (Ra Ga Ba Rb Gb Bb Rc Gc Bc ...) et tu voudrais les stocker dans des tableaux respectifs pour R G et B c'est bien ça ? Et tu bloque à la construction de l'index de parcours de ton tableau imagedata ? (Ce n'est pas pour répéter, mais j'ai eu du mal à suivre ce que tu demandais, je dois pas encore être bien éveillé )

Ce qui me gène le plus c'est la manière dont tu calcul index :
int index = 3 * ( j + i * width);
Au passage, c'est du C++ ? Est-ce normal que à chaque ittération il y ai une redéfinition de la variable ? (Je ne sais pas je ne fait que du C)

Sinon pour revenir au problème, en fait j'aurais mis tout simplement un index+=3, car le but du jeu est de le parcourir 3 cases par 3 cases non ?

Enfin après je n'ai peutêtre rien compris à ta demande ou alors je me gourre complètement !

  Qui ne tente rien...
  Ne risque pas d'avoir grand chose !!!

lundi 16 janvier 2006 à 11:20:19 | Re : probleme avec la recuperation de la couleur d'un pixel

KeniiyK

Membre Club
int index=0;
unsigned char * ptr;
for ( int i = 0; i < height; i++)
{
    for ( int j =0; j < width; j++)
    {
      ptr = imagedata[index];
       Img[i][j].r = ptr[0];
       Img[i][j].g = ptr[1];
       Img[i][j].b = ptr[2];

   index+=3;
       
    }
}

KeniiyK
lundi 16 janvier 2006 à 18:32:46 | Re : probleme avec la recuperation de la couleur d'un pixel

Alucards

mondrome tu as tout compris ^^

Color_t Heightmap::GetColor(CTexture* Image, int i, int j)
{
   int index = 3 * (i * Image->width  + j);
   
   Color_t*  _color = (Color_t*) malloc(sizeof(Color_t));
   unsigned char* ptr = &Image->ImageData[index];
   _color->r = ptr[0];
   _color->g = ptr[1];
   _color->b = ptr[2];
  
return (*_color);
}
float Heightmap::Elevation(int i, int j)
{
   Color_t pt_color = GetColor(&ImageMap, i,j);
   float height = 255 - (pt_color.r + pt_color.g + pt_color.b) / 3;
   return (height * EchelleVert);
 
}
voila mes 2 fonctions, une pour calculer la couleur du pixel et l'autre pour la mettre en niveau de gris afin de fabriquer une altitude entre 0 et 255;
et voici ma boucle d'initialisation de mon tableau:

for( int i = 0; i < ligne; i++)
   {
      for( int j = 0; j < colonne;j++)
      {  
         Map[i][j].x = j * pas;
         Map[i][j].y = i * pas;
         Map[i][j].z = Elevation(i,j);
      }
   }

ma facon de calculer l'index fonctionne j'ai trouvé; mon probleme se situe au niveau de mon imagedata mainteant.

voila la fonction qui me creer une texture
glGenTextures(1, &Texture.texID[0]);                  

glBindTexture(GL_TEXTURE_2D, Texture.texID[NO_FILTER]);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, 3, Texture.width, Texture.height, 0, Texture.type, GL_UNSIGNED_BYTE, Texture.ImageData);

et donc je ne sais pas comment lire le Imagedata; exemple mon loader tga fabrique une image qui est un unsigned char*imagedata [width * height * bpp] que je passe en parametre a glTexImage2D(); ( la ligne orange)

maintenant je voudrais savoir comment sont rangées les donnees dans imagedata.
si ca commence par le bas de mon image ou le haut si c'est stokee ligne de pixel par ligne de pixel ou par colonne ? voila


  

Tous les chemins mènent au RHUM !!!!!!!!!!!!!!!!!!!..............................
lundi 16 janvier 2006 à 19:45:52 | Re : probleme avec la recuperation de la couleur d'un pixel

patatalo

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
salut, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc03_16jo.asp imagedata est un tableau a 2 dimensions de la taille spécifiée dans type. pour toi GL_UNSIGNED_BYTE. typedef BPP unsigned char BPP imagedata[width][heigth]. @++
lundi 16 janvier 2006 à 21:11:39 | Re : probleme avec la recuperation de la couleur d'un pixel

Alucards


wahou genial merci a toi c'est exactement ce dont j'avais besoin, maintenant je sais comment lire mon imagedata, et merci pour le lien ca va beaucoup m'aider
encore merci
Tous les chemins mènent au RHUM !!!!!!!!!!!!!!!!!!!..............................


Cette discussion est classée dans : probleme, tableau, img, pixel, color


Répondre à ce message

Sujets en rapport avec ce message

probleme de tableau avec Dev c++ [ par D4rkRe4per ] Hello tlm!g un leger probleme de tableau avec Dev c++ 4.Dans mon fichier source j'ecris : const char pr[] = {"A", "Acca", "Agla", "Agra", "An", "Anc( Visualisation d'un tableau [ par Juke ] Bonjour,Dans le cadre d'un jeu de la vie, je suis en train de realiser une interface en gtk+, je suis à la recherche d'un widget permettant la visuali Probleme de tableau entre C et C++ [ par fred23 ] Bonjour,J'ai récupéré des codes qui semblent en C et je souahiterais les mettre en C++.qui peut me dire si ces codes sont en C ou C++.Matrix = (int ** Probleme de caractere dans un tableau [ par byoushin ] Bonjour,J'ai un tableau a 2 dimensions qui ressemble a ca :0 1 2 3 4 5 6 7 8 91 0 0 0 0 0 0 0 0 02 0 0 0 0 0 0 0 0 03 0 0 0 0 0 0 0 0 04 0 0 0 0 remplir un tableau bidimensionnel alatroirement [ par titchouno ] En fait je cree un tableau [X][X] que je rempli de zero.Mon probleme est de mettre X 1 aleatoirement dans ce tableau. j utilise deux varaibles aleato probleme entre chaine et tableau [ par Elkaire ] salut a tous, je debute en C et je me retrouve confrontéau probleme suivant : dans une mon application cllient serveur mon client envoie des trames so Probleme de tableau [ par manta7 ] Bonjour, j'ai un petit problème avec la compilationde ce code : int *t; t = malloc(B * sizeof (int)); Je suis sous Microsoft Visual C++ 6 mais je pr gros probleme sur tetris [ par popil ] je fais un tetris avec interface graphique en opengl.je fai un tableau pour reperer les pieces qui sont deja tombees.j'arrive a limiter les mouvements Afficher une image sur une surface DirectDraw a partir d'un tableau de pixel. [ par noetom ] Salut Je voudrais savoir si il existe une fonction de DirectDraw permettant de stocker un tableau de pixel dans une surface DirectDraw histoire de p Difficile de résumer... aidez moi SVP [ par supergrey ] Bonjour, voila mon probleme, je réalise un jeu avec DX9 et j'ai besoin d'y inclure un systeme pour enregister des videos des phase de jeu.J'ai donc pr


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,836 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales