benlustr
Messages postés32Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention 5 juillet 2006
-
8 juin 2006 à 11:45
benlustr
Messages postés32Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention 5 juillet 2006
-
8 juin 2006 à 13:36
Bonjour à tous. J'ai un problème bizarre : Je dois récupérer une image en niveaux de gris (0-255) en mémoire. Or, cette image est créée par une carte matrox, et est stockée dans un tableau à deux dimensions de types MIL_ID (spécial matrox). ce type occupe 4 octets (bizarerie : on a donc 4 pixels par élément du tableau) . Or, je voudrais récupérer les valeurs de chaque pixel pour les stocker dans un tableau de float (Float : également 4octets).
Pour accéder à mes éléments, j'ai donc deux pointeurs :
float *pfloat;
MIL_ID *pmil;
en toute logique, je fais pfloat = pmil. puisque les deux types occupent le même espace, puis je fais une boucle sur l'ensemble du tableau
or, grande surprise, je n'ai pas la même chose dans les deux tableaux. exemple, pour une cas donnée, je vais avoir :
*pmil = $C8C100FF par exemple (c'est donc juste, ce sont bien mes pixels)
*pfloat = $20000000 (j'ai toujours un truc de ce genre, un chiffre puis que des 0).
bref, je ne comprends pas pk mes données sont modifiées comme ça. J'ai essayé les opérateurs de cast, ça ne change rien !
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 8 juin 2006 à 12:05
Il faudrait voir la définition du type MIL_ID.
En tous cas je vois pas pourquoi tu utilises un float*. Le compilatur fait des conversion int->float, c'est normal que les valeurs soient codées différemment.
Si tu fais
int i = 0;
float f = i;
f et i seront codés différemment
benlustr
Messages postés32Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention 5 juillet 2006 8 juin 2006 à 12:16
Ouais.... bah c'est la merde
En gros, tu veux me dire que int 10 et float 10 n'auront pas la même valeur en mémoire.ouais ... logique remarque.
En fait, pour récupérer mes valeurs, je fais un printf("valeur MIL %x, valeur float %x", *pmil,*pfloat);
ça serait donc lors de la copie (*pmil=*pfloat) que les données changeraient ?
benlustr
Messages postés32Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention 5 juillet 2006 8 juin 2006 à 13:36
En fait tout ça c'est pour une application très spécialisée avec du traitement d'image pour faire de l'holographie, et on a besoin d'avoir des floats pour ensuite pouvoir appliquer l'algorithme de calcul qui contient des transformées de fourier rapides sur des complexes. Bref, c'est purement mathématique.