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 !!!!!!!!!!!!!!!!!!!..............................
A voir également:
Probleme avec la recuperation de la couleur d'un pixel
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 15 janv. 2006 à 20:43
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++;
}
}
Alucards
Messages postés40Date d'inscriptionmercredi 26 mars 2003StatutMembreDernière intervention 3 septembre 2008 15 janv. 2006 à 22:32
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 !!!!!!!!!!!!!!!!!!!..............................
Alucards
Messages postés40Date d'inscriptionmercredi 26 mars 2003StatutMembreDernière intervention 3 septembre 2008 15 janv. 2006 à 22:36
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 !!!!!!!!!!!!!!!!!!!..............................
Vous n’avez pas trouvé la réponse que vous recherchez ?
mondrone
Messages postés246Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention11 mars 2012 16 janv. 2006 à 11:01
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 !
<hr size="2" width="100%"> Qui ne tente rien...
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.
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 !!!!!!!!!!!!!!!!!!!..............................
Alucards
Messages postés40Date d'inscriptionmercredi 26 mars 2003StatutMembreDernière intervention 3 septembre 2008 16 janv. 2006 à 21:11
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 !!!!!!!!!!!!!!!!!!!..............................