[Insight-users] Need help: import/export of memory buffers

Hans Johnson hjohnson@mail.psychiatry.uiowa.edu
Fri, 14 Feb 2003 13:18:27 -0600 (CST)


Todd,

One caveate to be aware of:  The ITKSoftwareGuide assumes that the memory 
you are passing was created with a "new" call (i.e. not a malloc).  If the 
mrmory was created from some c library routines, then it was certainly 
created with malloc an the ITKSoftwareGuide does not address this 
situation.  I have not tested it, but I am almost certain that your 
program will segfault if you give ITK the ability to "delete" the malloced 
memory.

Regards,
Hans



On Fri, 14 Feb 2003, David Holmes wrote:

> Todd-
> 
> there is a nice section on this in the
> ITKSoftwareGuide (found on the website).  I recommend
> that you start there.  I believe it is section 4.1.7. 
> The only real requirement is that your data is located
> in a linear, contiguous chunk of memory.
> 
> Here is some similar code that we use to accomplish
> that task.  It's not the complete code, but it gives
> you the idea.  If you need more of an explaination,
> let me know.
> 
> //Our array to ITK
> 
> if (copyMemFlag) {
>   outVolITK->Allocate();
>   memcpy((void *)outVolITK->GetBufferPointer(),
> inVol->Mem, inVol->BytesPerVolume);
> } else {
>   itk::ImportImageContainer<long unsigned
> int,T>::Pointer import; 
>   import = itk::ImportImageContainer<long unsigned
> int,T>::New();
>   import->Initialize();
>   import->SetImportPointer((T*)inVol->Mem,
> inVol->BytesPerVolume, false);
>   outVolITK->SetPixelContainer(import);
> }
> 
> 
> //ITK to our array
> 
> if (copyMemFlag) {
>   outVol = AVW_CreateVolume(NULL, region.GetSize(0),
> region.GetSize(1), region.GetSize(2));
>   outVol->Mem = memcpy(outVol->Mem, (void
> *)inImgITK->GetBufferPointer(),
> outVol->BytesPerVolume);
> } else 	{
>  
> inImgITK->GetPixelContainer()->SetContainerManageMemory(false);
>   outVol =
> AVW_CreateVolume(inImgITK->GetPixelContainer()->GetImportPointer(),
> region.GetSize(0), region.GetSize(1),
> region.GetSize(2));
> }
> 
> 
> david
> 
> 
> --- Todd Koumrian <todd@core-dump.stanford.edu> wrote:
> > Hello,
> > 
> > I need help interfacing ITK functionality to our
> > research framework.  In
> > order to use ITK, I must New() appropriate itkImages
> > and somehow load them
> > with pixel data from another in-memory format. 
> > After processing, I must
> > return the results to another buffer (not ITK) also
> > managed by the
> > application.  While I understand the basics of image
> > creation no problem, I
> > don't understand how to do this bulk load/unload
> > efficiently.
> > 
> > GetPixel()/SetPixel() is of course too inefficient.
> > 
> > itkImportImageFilter exists, but what about export?
> > 
> > The manual makes mention of using image iterators as
> > a better alternative to
> > GetPixel()/SetPixel(), but does not seem to explain
> > them.  I'm lost here.
> > 
> > Regards,
> > 
> > Todd Koumrian
> > 
> > 
> > _______________________________________________
> > Insight-users mailing list
> > Insight-users@public.kitware.com
> >
> http://public.kitware.com/mailman/listinfo/insight-users
> 
> 
> __________________________________________________
> Do you Yahoo!?
> Yahoo! Shopping - Send Flowers for Valentine's Day
> http://shopping.yahoo.com
> _______________________________________________
> Insight-users mailing list
> Insight-users@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-users
>