]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/OpenImageDialog.cxx
changes in open image dialog, for creaimageio
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / OpenImageDialog.cxx
1
2 #include "OpenImageDialog.h"
3 #include "creaWx.h"
4
5 #if defined(__GNUC__)
6 // GCC compiler
7 // dlopen, dlsym, etc.
8   #include <dlfcn.h>
9 #endif
10
11 typedef vtkImageData* (*GETIMAGEDATADIALOG)();
12
13 namespace creaMaracasVisuKernel{
14         OpenImageDialog::OpenImageDialog(bool usegimmick)
15         {
16                 img = NULL;             
17                 _filename = "";
18                 bool gimmickfound = false;
19
20                 if(usegimmick){
21                 #ifdef WIN32
22                         HINSTANCE gimmickhandle;
23                         gimmickhandle = LoadLibrary(TEXT("creaImageIO.dll"));
24                         std::cout<<"imagehandle "<<gimmickhandle<<std::endl;
25                         if(gimmickhandle!=NULL){
26
27                                 GETIMAGEDATADIALOG getImageDataDialog;
28
29                                 getImageDataDialog = (GETIMAGEDATADIALOG)GetProcAddress(gimmickhandle, "getImageDataDialog");
30
31                                 std::cout<<"imagedatadialog "<<getImageDataDialog<<std::endl;
32
33                                 if(getImageDataDialog!=NULL){
34                                         img = getImageDataDialog();
35                                         gimmickfound = true;
36                                 }
37                                 if(!FreeLibrary(gimmickhandle)){
38                                         std::cout<<"Error while releasing the handle creaImageIO2.dll"<<std::endl;
39                                 }
40                         }
41                 #else
42                         void * gimmickhandle;   
43                         GETIMAGEDATADIALOG getImageDataDialog;
44                         char * erreur;
45                         int closingerror;
46                         gimmickhandle = dlopen ("libcreaImageIO.so", RTLD_LAZY);                        
47                         if (! gimmickhandle) {
48                                 erreur = dlerror ();
49                                 std::cout<<erreur<<"imagehandle "<<gimmickhandle<<std::endl;                
50                         }else{
51                                 getImageDataDialog = (GETIMAGEDATADIALOG) dlsym (gimmickhandle, "getImageDataDialog");
52                                 if(!getImageDataDialog){
53                                 erreur = dlerror ();
54                                 std::cout<<erreur<<"getImageDataDialog "<<getImageDataDialog<<std::endl;                        
55                                 }else{
56                                         img = (*getImageDataDialog)();
57                                         gimmickfound = true;
58                                         
59                                 }
60                                 /*dlclose returns 0 on success, non-zero on error*/
61                                 closingerror = dlclose(gimmickhandle);
62                                 if(closingerror!=0){
63                                         std::cout<<closingerror<<"error closing handle  "<<gimmickhandle<<std::endl;  
64                                 }else{
65                                         std::cout<<"handle released..."<<std::endl;  
66                                 }
67                         }
68
69                 #endif
70                 }
71                 
72                 if(!gimmickfound || !usegimmick){
73                         //int i, j, k, extint[6];
74                         //double spacing[3];
75                         //unsigned short* ptr1, *ptr2;
76                         wxFileDialog* FD =
77                           new wxFileDialog( 0, _T("Read Image"),wxEmptyString,wxEmptyString, _T("*.mhd"));
78
79                         if (FD->ShowModal()==wxID_OK)
80                         {
81                                 std::string  path= crea::wx2std(FD->GetPath());
82                                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();
83                                 reader->SetFileName(path.c_str());
84                                 reader->Update();
85                                 _filename = path;
86                                 img = vtkImageData::New();
87                                 img->DeepCopy(reader->GetOutput());
88                                 //reader->GetOutput()->Delete();
89                                 reader->Delete();
90                                 /*std::cout<<"image reference count "<<img->GetReferenceCount()<<std::endl;
91                                 reader->GetOutput()->GetSpacing(spacing);
92                                 img->SetSpacing(spacing);
93                                 reader->GetOutput()->GetExtent(extint);
94                                 img->SetExtent(extint);
95                                 img->SetScalarType(reader->GetOutput()->GetScalarType());                               
96                                 img->AllocateScalars();
97                                 std::cout<<"image reference count "<<img->GetReferenceCount()<<std::endl;
98                                 for (i=extint[0];i <= extint[1];i++){
99                                         for (j=extint[2];j<=extint[3];j++){
100                                                 for (k=extint[4];k<=extint[5];k++){
101                                                         
102                                                                 ptr1=(unsigned short*) reader->GetOutput()->GetScalarPointer(i,j,k); 
103                                                                 ptr2=(unsigned short*)img->GetScalarPointer(i,j,k);
104                                                                 *ptr2 = *ptr1;
105                                                 }
106                                         }
107                                 }*/
108                                 
109                                 /*std::cout<<"image reference count "<<img->GetReferenceCount()<<std::endl;*/
110                         }
111                         //delete FD;
112                 }
113         }
114
115         //-------------------------------------------------------------------
116         OpenImageDialog::~OpenImageDialog()
117         {
118                 img = NULL;
119         }
120
121         vtkImageData* OpenImageDialog::getImageData(){          
122                 return img;
123         }
124         std::string OpenImageDialog::getFilename(){
125                 return _filename;
126         }
127 }