Bonjour,

j' essaye de lire une image enregistree en .raw.
je connais la taille et le format des valeurs.

j'arrive a lire l'image quand les valeurs sont codes en int avec ce 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
39
40
41
42
43
44
45
46
47
48
49
char *buffer = new char [length_reading];
 
ifstream input_file;
input_file.open(tfilename[proj].c_str(), ifstream::in);
cout << "file opened: " << tfilename[proj] << endl;
 
if(input_file == NULL)
  {
   cerr<<"Cannot open input file \n";
   return;
   }
 
input_file.read(buffer3,length_reading);
 
if (!input_file)
  {
    std::cout << "error: only " << input_file.gcount() << " could be read" << endl;
    return;
   }
 
int buffer_i = 0;
 
// fill the matrix data with all projections
   for(int jj=0; jj <= tsize[0]-1; jj++) {
       for(int kk=0; kk <= tsize[1]-1; kk++) {
 
	  char num1 = buffer[buffer_i];
	  buffer_i++;
	  char num2 = buffer[buffer_i];
	  buffer_i++;
 
	  unsigned short number = 0;
	  number |= (unsigned char)num2;
	  number |= num1 << 8;
	  unsigned short number2;
	  number2 = (number>>8)|(number <<8);
 
	  double value_corrected;
	  value_corrected = -log((double(number2)-double(dark[jj][kk]))/(double(bright[jj][kk])-double(dark[jj][kk])));
	   if (value_corrected<0)
		{data[jj][kk]= 0;}
	   else
		{data[jj][kk] = int16_t(value_corrected*1000);}
           } //end for tsize[0]
} //end for tsize[1]
 
delete[] buffer;
 
input_file.close();
pour lire des 32 bits float j'ai multiplie length_reading par 2
au lieu de unsigned short pour number et number2 j'ai mis float
et au lieu de (number>>8)|(number <<8);
j'essaye d'utiliser __builtin_bswap32

mais ca ne marche pas. j'ai n'importe quoi comme valeur.

qu'est-ce qu'il faudrait que je change d'autres dans mon code pour lire des 32 bits float ?

Merci