Bonjour,

J'ai une nouvelle fois besoin de vos lumières avisées...

J'ai un tableau 2D (600*600) contenant des températures en centièmes de Kelvin (donc des nombres à 5 chiffres) que je récupère castées en unsigned short int. Je souhaite enregistrer ce tableau sous forme d'une image tiff en niveau de gris, pour cela j'essaye de convertir mes données codées sur 16 bits en données codées sur 8 bits, puis j'utilise les fonctions TIFFOpen, TIFFWriteScanline et TIFFClose de la librairie tifflib.

Le problème c'est que l'image que j'obtiens est toute noire... Il semblerait donc que je me sois trompé quand je veux passer des données codées sur 16 bits aux données codées sur 8 bits... Ou alors lors de l'utilisation de TIFFWriteScanline...

et voici un bout de mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*NBLIG et NBCOL sont des constantes valant 600 et temperature est un tableau 2D casté en unsigned short int contenant mes températures*/
      unsigned char ** temp8bit = malloc (NBLIG *sizeof(unsigned char *));
      if (temp8bit == NULL)
         {
         free(temp8bit);
         printf("erreur lors de l'allocation memoire 4");
         }
      else
         {
         for (i=0;i<NBLIG;i++)
            {
            temp8bit[i]= malloc(NBCOL * sizeof(unsigned char));
            if (temp8bit[i] == NULL)
               {
               free(temp8bit[i]);
               printf("erreur lors de l'allocation memoire 5");
               }
            for (j=0; j<NBCOL; j++)
               {
               temp8bit[i][j]=temperature[i][j]*(255/65535);
               }
            }
         TIFF* imgTIFF = TIFFOpen("toto.tif","w");
         if (imgTIFF == NULL)
            {
            printf("erreur à la creation du tiff");
            }
         else
            { 
            TIFFSetField(imgTIFF,TIFFTAG_IMAGEWIDTH,NBLIG);
            for (i=0; i<NBLIG; i++)
               {
               TIFFWriteScanline(imgTIFF,temp8bit[i],i,0);
               }            
            TIFFClose(imgTIFF);  
            }
         free(temp8bit);   
         }