OpenImageDialog.cxx

Go to the documentation of this file.
00001 
00002 #include "OpenImageDialog.h"
00003 #include "creaWx.h"
00004 
00005 #if defined(__GNUC__)
00006 // GCC compiler
00007 // dlopen, dlsym, etc.
00008   #include <dlfcn.h>
00009 #endif
00010 
00011 typedef vtkImageData* (*GETIMAGEDATADIALOG)();
00012 
00013 namespace creaMaracasVisuKernel{
00014         OpenImageDialog::OpenImageDialog(bool usegimmick)
00015         {
00016                 img = NULL;             
00017                 _filename = "";
00018                 bool gimmickfound = false;
00019 
00020                 if(usegimmick){
00021                 #ifdef WIN32
00022                         HINSTANCE gimmickhandle;
00023                         gimmickhandle = LoadLibrary(TEXT("creaImageIO.dll"));
00024                         std::cout<<"imagehandle "<<gimmickhandle<<std::endl;
00025                         if(gimmickhandle!=NULL){
00026 
00027                                 GETIMAGEDATADIALOG getImageDataDialog;
00028 
00029                                 getImageDataDialog = (GETIMAGEDATADIALOG)GetProcAddress(gimmickhandle, "getImageDataDialog");
00030 
00031                                 std::cout<<"imagedatadialog "<<getImageDataDialog<<std::endl;
00032 
00033                                 if(getImageDataDialog!=NULL){
00034                                         img = getImageDataDialog();
00035                                         gimmickfound = true;
00036                                 }
00037                                 if(!FreeLibrary(gimmickhandle)){
00038                                         std::cout<<"Error while releasing the handle creaImageIO2.dll"<<std::endl;
00039                                 }
00040                         }
00041                 #else
00042                         void * gimmickhandle;   
00043                         GETIMAGEDATADIALOG getImageDataDialog;
00044                         char * erreur;
00045                         int closingerror;
00046                         gimmickhandle = dlopen ("libcreaImageIO.so", RTLD_LAZY);                        
00047                         if (! gimmickhandle) {
00048                                 erreur = dlerror ();
00049                                 std::cout<<erreur<<"imagehandle "<<gimmickhandle<<std::endl;                
00050                         }else{
00051                                 getImageDataDialog = (GETIMAGEDATADIALOG) dlsym (gimmickhandle, "getImageDataDialog");
00052                                 if(!getImageDataDialog){
00053                                 erreur = dlerror ();
00054                                 std::cout<<erreur<<"getImageDataDialog "<<getImageDataDialog<<std::endl;                        
00055                                 }else{
00056                                         img = (*getImageDataDialog)();
00057                                         gimmickfound = true;
00058                                         
00059                                 }
00060                                 /*dlclose returns 0 on success, non-zero on error*/
00061                                 closingerror = dlclose(gimmickhandle);
00062                                 if(closingerror!=0){
00063                                         std::cout<<closingerror<<"error closing handle  "<<gimmickhandle<<std::endl;  
00064                                 }else{
00065                                         std::cout<<"handle released..."<<std::endl;  
00066                                 }
00067                         }
00068 
00069                 #endif
00070                 }
00071                 
00072                 if(!gimmickfound || !usegimmick){
00073                         //int i, j, k, extint[6];
00074                         //double spacing[3];
00075                         //unsigned short* ptr1, *ptr2;
00076                         wxFileDialog* FD =
00077                           new wxFileDialog( 0, _T("Read Image"),wxEmptyString,wxEmptyString, _T("*.mhd"));
00078 
00079                         if (FD->ShowModal()==wxID_OK)
00080                         {
00081                                 std::string  path= crea::wx2std(FD->GetPath());
00082                                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();
00083                                 reader->SetFileName(path.c_str());
00084                                 reader->Update();
00085                                 _filename = path;
00086                                 img = vtkImageData::New();
00087                                 img->DeepCopy(reader->GetOutput());
00088                                 //reader->GetOutput()->Delete();
00089                                 reader->Delete();
00090                                 /*std::cout<<"image reference count "<<img->GetReferenceCount()<<std::endl;
00091                                 reader->GetOutput()->GetSpacing(spacing);
00092                                 img->SetSpacing(spacing);
00093                                 reader->GetOutput()->GetExtent(extint);
00094                                 img->SetExtent(extint);
00095                                 img->SetScalarType(reader->GetOutput()->GetScalarType());                               
00096                                 img->AllocateScalars();
00097                                 std::cout<<"image reference count "<<img->GetReferenceCount()<<std::endl;
00098                                 for (i=extint[0];i <= extint[1];i++){
00099                                         for (j=extint[2];j<=extint[3];j++){
00100                                                 for (k=extint[4];k<=extint[5];k++){
00101                                                         
00102                                                                 ptr1=(unsigned short*) reader->GetOutput()->GetScalarPointer(i,j,k); 
00103                                                                 ptr2=(unsigned short*)img->GetScalarPointer(i,j,k);
00104                                                                 *ptr2 = *ptr1;
00105                                                 }
00106                                         }
00107                                 }*/
00108                                 
00109                                 /*std::cout<<"image reference count "<<img->GetReferenceCount()<<std::endl;*/
00110                         }
00111                         //delete FD;
00112                 }
00113         }
00114 
00115         //-------------------------------------------------------------------
00116         OpenImageDialog::~OpenImageDialog()
00117         {
00118                 img = NULL;
00119         }
00120 
00121         vtkImageData* OpenImageDialog::getImageData(){          
00122                 return img;
00123         }
00124         std::string OpenImageDialog::getFilename(){
00125                 return _filename;
00126         }
00127 }

Generated on 20 Oct 2010 for creaMaracasVisu_lib by  doxygen 1.6.1