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:
pour lire des 32 bits float j'ai multiplie length_reading par 2
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();
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
Partager