X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk%2Fsrc%2FbbcreaImageIOItkImagesChooserDialogBox.cxx;h=e0c2a1ed29402d0924a5aa4bde2a34aaa86c874b;hb=4df8ce04086b36aa19f2a86ce1c9515b34e4f9dc;hp=9c77a1de377b1cd7c416414c1b04e61aa985cd4b;hpb=abc0f1167f95cd0ed091cfbd3ac6df41445caf90;p=creaImageIO.git diff --git a/bbtk/src/bbcreaImageIOItkImagesChooserDialogBox.cxx b/bbtk/src/bbcreaImageIOItkImagesChooserDialogBox.cxx index 9c77a1d..e0c2a1e 100644 --- a/bbtk/src/bbcreaImageIOItkImagesChooserDialogBox.cxx +++ b/bbtk/src/bbcreaImageIOItkImagesChooserDialogBox.cxx @@ -31,14 +31,30 @@ #include "bbcreaImageIOItkImagesChooserDialogBox.h" #include "bbcreaImageIOPackage.h" +#include "itkImage.h" +#include "itkImportImageFilter.h" + +/* // ------------------------------------------------------------------------- // LFV: avoid itk::Concept check on 4d or superior images #define BBCREAIMAGEIO_ChooserDlg_Template( t, ty, di ) \ - if( t == typeid( itk::Image< ty, di > ) ) \ + if( t == typeid( itk::Image< ty, di >* ) ) \ { \ this->Export< itk::Image< ty, di > >( ); \ this->ExportVTK< itk::Image< ty, di > >( ); \ } +*/ + +// ------------------------------------------------------------------------- +// LFV: avoid itk::Concept check on 4d or superior images +#define BBCREAIMAGEIO_ChooserDlg_Template( t, ty, di ) \ + if( t == typeid( itk::Image< ty, di >* ) ) \ + { \ + this->Export< ty , di >( ); \ + this->ExportVTK< itk::Image< ty, di > >( ); \ + } + + // ------------------------------------------------------------------------- namespace bbcreaImageIO @@ -97,41 +113,74 @@ void ItkImagesChooserDialogBox::Process() delete dlg; } -template + +//template +template void ItkImagesChooserDialogBox::Export() { - if (dlg->getImagesSelected().size() == 1) - { + typedef itk::Image TImage; + if (dlg->getImagesSelected().size() == 1) + { bbSetOutputOut( dlg->getTemplatedImagesSelected().front().GetPointer() ); - } - else if (dlg->getImagesSelected().size() > 1) - { - OutputImagesITKType outVect; - - typename std::vector tempImgs= dlg->getTemplatedImagesSelected(); - typename std::vector::iterator it = tempImgs.begin(); - for(;it != tempImgs.end(); ++it) - { - outVect.push_back( (*it).GetPointer() ); - } - bbSetOutputOutIImages( outVect); - } - else - { + } else if (dlg->getImagesSelected().size() > 1){ + OutputImagesITKType outVect; + typename std::vector tempImgs= dlg->getTemplatedImagesSelected(); + typename std::vector::iterator it = tempImgs.begin(); + for(;it != tempImgs.end(); ++it) + { + outVect.push_back( (*it).GetPointer() ); + } // for + bbSetOutputOutIImages( outVect); + + typedef ty RGBPixelType; + typedef itk::ImportImageFilter< ty , di > ImportFilterType; + typename ImportFilterType::Pointer importFilter = ImportFilterType::New(); + + typename TImage::SizeType imsize; + imsize[0] = tempImgs[0].GetPointer()->GetLargestPossibleRegion().GetSize()[0]; + imsize[1] = tempImgs[0].GetPointer()->GetLargestPossibleRegion().GetSize()[1]; + imsize[2] = tempImgs.size(); + + typename ImportFilterType::IndexType start; + start.Fill( 0 ); + typename ImportFilterType::RegionType region; + region.SetIndex( start ); + region.SetSize( imsize ); + importFilter->SetRegion( region ); + + const itk::SpacePrecisionType origin[ 3 ] = { 0.0, 0.0, 0.0 }; + importFilter->SetOrigin( origin ); + + const itk::SpacePrecisionType spacing[ 3 ] = { 1.0, 1.0, 1.0 }; + importFilter->SetSpacing( spacing ); + const unsigned long int numberOfPixels2D = imsize[0]*imsize[1]; + const unsigned long int numberOfPixels2DInBytes = imsize[0]*imsize[1]*sizeof(ty); + const unsigned long int numberOfPixels3D = imsize[0]*imsize[1]*imsize[2]*sizeof(ty); + + RGBPixelType * localBuffer = new RGBPixelType[ numberOfPixels3D ]; + RGBPixelType * tmpLocalBuffer = localBuffer; + + it = tempImgs.begin(); + for(;it != tempImgs.end(); ++it) + { + memcpy(tmpLocalBuffer, (*it).GetPointer()->GetBufferPointer(), numberOfPixels2DInBytes); + tmpLocalBuffer = tmpLocalBuffer + numberOfPixels2D; + } // for + + const bool importImageFilterWillOwnTheBuffer = true; + importFilter->SetImportPointer( localBuffer , numberOfPixels3D , importImageFilterWillOwnTheBuffer ); + importFilter->Update(); + importFilter->Register(); + bbSetOutputOut( importFilter->GetOutput() ); + + } else { // warning: passing NULL to non-pointer //bbSetOutputOut( NULL); bbSetOutputOut(0); // JPR } - // FCY To test the Output - //typedef itk::Image ImageType; - //typedef itk::ImageFileReader< ImageType > itkReaderType; - // typename itkReaderType::Pointer reader = itkReaderType::New(); - // - // reader->SetFileName("d:\test.hdr"); - // reader->Update(); - //reader->GetOutput()->Register(); - // this->bbSetOutputOut(reader->GetOutput()); } + + template void ItkImagesChooserDialogBox::ExportVTK() { @@ -145,40 +194,34 @@ void ItkImagesChooserDialogBox::ExportVTK() dlg->split3Din3Dvtk( (*it) ); } bbSetOutputOutVImages( dlg->getVtkImagesSelected() ); - } - else if (dlg->getDims().front() == 4) - { + } else if (dlg->getDims().front() == 4) { // To Test // dlg->split4Din3Dvtk("d:/temp2"); // bbSetOutputOutVImages( dlg->getVtkImagesSelected()); - } - else - { - // NOT IMPLEMENTED YET FOR DIMENSIONS > 4 - - } - + } else { + // NOT IMPLEMENTED YET FOR DIMENSIONS > 4 + } // if dlg } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void ItkImagesChooserDialogBox::bbUserSetDefaultValues() -{ - +{ } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void ItkImagesChooserDialogBox::bbUserInitializeProcessing() { - } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void ItkImagesChooserDialogBox::bbUserFinalizeProcessing() { - } -} -// EO namespace bbcreaImageIO + +} // EO namespace bbcreaImageIO