Pointeurs et changement de types louches

Signaler
Messages postés
32
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
5 juillet 2006
-
Messages postés
32
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
5 juillet 2006
-
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

for(i=0 ; i<taille_x ; i++)
    for(j=0 ; j<taille_y ; j++)
       *pfloat = *pmil;

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 !

Merci à vous, et bravo si vous trouvez !!!

Benjamin

4 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
32
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
5 juillet 2006

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 ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Oui c'est lors de la copie.
Mais j'ai pas compris pourquoi tu utilises des float
Messages postés
32
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
5 juillet 2006

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.