root / src / tiff2inr.cpp @ 4
Historique | Voir | Annoter | Télécharger (2,24 ko)
1 | 4 | akiss | /*
|
---|---|---|---|
2 | 4 | akiss | Convert tif file into inr
|
3 | 4 | akiss | |
4 | 4 | akiss | To compile :
|
5 | 4 | akiss | g++ -o tiff2inr tiff2inr.cpp -O2 -L/usr/X11R6/lib -lm -lpthread -lX11 -fopenmp -l:libtiff.so.5
|
6 | 4 | akiss | Needs CImg.h
|
7 | 4 | akiss | |
8 | 4 | akiss | To execute :
|
9 | 4 | akiss | ./tiff2inr img.tif compress
|
10 | 4 | akiss | |
11 | 4 | akiss | img : image in .tif
|
12 | 4 | akiss | compress : if 0 then output image is not compressed (img.inr), else the output is img.inr.gz
|
13 | 4 | akiss | |
14 | 4 | akiss | */
|
15 | 4 | akiss | #include <iostream> |
16 | 4 | akiss | #include <math.h> |
17 | 4 | akiss | #include <sstream> |
18 | 4 | akiss | #include <fstream> |
19 | 4 | akiss | |
20 | 4 | akiss | #define cimg_use_tiff
|
21 | 4 | akiss | #include "CImg.h" |
22 | 4 | akiss | |
23 | 4 | akiss | using namespace cimg_library; |
24 | 4 | akiss | using namespace std; |
25 | 4 | akiss | |
26 | 4 | akiss | //-----------------------------------------------------------------------------
|
27 | 4 | akiss | //Main
|
28 | 4 | akiss | //-----------------------------------------------------------------------------
|
29 | 4 | akiss | int main (int argc, char* argv[]) |
30 | 4 | akiss | { |
31 | 4 | akiss | |
32 | 4 | akiss | if( argc>3 || argc<2 ) |
33 | 4 | akiss | { |
34 | 4 | akiss | cout<<"tiff2inr : !! wrong number of arguments !!"<<endl;
|
35 | 4 | akiss | cout<<"Usage : tiff2inr img.tif compress"<<endl;
|
36 | 4 | akiss | return 0; |
37 | 4 | akiss | } |
38 | 4 | akiss | |
39 | 4 | akiss | // -------------------
|
40 | 4 | akiss | // Sparsing arguments
|
41 | 4 | akiss | // -------------------
|
42 | 4 | akiss | string name=argv[1]; |
43 | 4 | akiss | |
44 | 4 | akiss | bool compress=true; |
45 | 4 | akiss | if (argc==3) |
46 | 4 | akiss | { |
47 | 4 | akiss | if (string(argv[2])=="0")compress=false; |
48 | 4 | akiss | cout<<"Output file will not be compressed. "<<endl;
|
49 | 4 | akiss | } |
50 | 4 | akiss | |
51 | 4 | akiss | CImg<> img; |
52 | 4 | akiss | CImg<char> description;
|
53 | 4 | akiss | float tailleVoxel[3] = {0}; |
54 | 4 | akiss | |
55 | 4 | akiss | if(name.compare(name.size()-4,4,".tif")==0) |
56 | 4 | akiss | { |
57 | 4 | akiss | cout<<"The input file is a .tif file. OK"<<endl;
|
58 | 4 | akiss | } |
59 | 4 | akiss | else
|
60 | 4 | akiss | { |
61 | 4 | akiss | cout<<"This is a tif file converter. Please give a .tif file as input."<<endl;
|
62 | 4 | akiss | return 0; |
63 | 4 | akiss | } |
64 | 4 | akiss | |
65 | 4 | akiss | // -----------------------
|
66 | 4 | akiss | // Reading the .tif image file
|
67 | 4 | akiss | // -----------------------
|
68 | 4 | akiss | cout<<"File to read : "<<name<<endl;
|
69 | 4 | akiss | if(name.compare(name.size()-4,4,".tif")==0) |
70 | 4 | akiss | { |
71 | 4 | akiss | cout<<"The input file is a .tif file."<<endl;
|
72 | 4 | akiss | } |
73 | 4 | akiss | else
|
74 | 4 | akiss | { |
75 | 4 | akiss | cout<<"This is a tif file converter. Please give a .tif file as input."<<endl;
|
76 | 4 | akiss | return 0; |
77 | 4 | akiss | } |
78 | 4 | akiss | |
79 | 4 | akiss | img.load_tiff(name.c_str(),0,~0U,1,tailleVoxel,&description); |
80 | 4 | akiss | cout<<"Image depth : "<<img.depth()<<endl;
|
81 | 4 | akiss | cout<<"Voxel size : ("<<tailleVoxel[0]<<","<<tailleVoxel[1]<<","<<tailleVoxel[2]<<")"<<endl; |
82 | 4 | akiss | |
83 | 4 | akiss | |
84 | 4 | akiss | // -----------------------
|
85 | 4 | akiss | // Writing the .inr or .inr.gz file
|
86 | 4 | akiss | // -----------------------
|
87 | 4 | akiss | |
88 | 4 | akiss | name.erase(name.size()-4);
|
89 | 4 | akiss | string newname=name+string(".inr"); |
90 | 4 | akiss | CImg<unsigned char> imgbis=img; |
91 | 4 | akiss | img.assign(); |
92 | 4 | akiss | imgbis.save_inr(newname.c_str(),tailleVoxel); |
93 | 4 | akiss | imgbis.assign(); |
94 | 4 | akiss | |
95 | 4 | akiss | if (compress)
|
96 | 4 | akiss | { |
97 | 4 | akiss | string zip="gzip -f "+newname; |
98 | 4 | akiss | if(system(zip.c_str()));
|
99 | 4 | akiss | } |
100 | 4 | akiss | |
101 | 4 | akiss | return 0; |
102 | 4 | akiss | } |