<DIV>
<DIV>
<DIV>Dear users,</DIV>
<DIV>&nbsp;</DIV>
<DIV>I have to build an user interface by using MS VC++ for&nbsp;medical image processing. Instead of having to compute reading of image files, I am using&nbsp;ITK-VTK but I am quite new in this.</DIV>
<DIV>&nbsp;</DIV>
<DIV>- I read a raw 3D image using ITK and, as you suggested in "http://public.kitware.com/pipermail/insight-users/2003-April/003345.html",&nbsp; I&nbsp;use&nbsp;itkExtractImageFilter to create a 2D image from the 3D volume and get the pixel data in a buffer with:&nbsp;</DIV>
<DIV>extractFilter-&gt;GetOutput()-&gt;GetBufferPointer().</DIV>
<DIV>&nbsp;</DIV>
<DIV>
<DIV>- I would like&nbsp;to create a bitmap&nbsp; from this data using MFC&nbsp;classes to show the image in a frame of my user interface already built. To do so, I use HBitmap and CreateDIBitmap, but HBITMAP returned is NULL and nothing happens. </DIV></DIV>
<DIV>&nbsp;</DIV>
<DIV>- Can you suggest me a way to use VTK to display my image&nbsp;not in a modal window apart as implemented in vtkImageViewer, but in a frame of my interface?</DIV>
<DIV>&nbsp;</DIV>
<DIV>I joined a part of my code below. Please help me.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Thanks in advance,</DIV>
<DIV>&nbsp;</DIV>
<DIV>Isabelle Renaud</DIV>
<DIV>&nbsp;</DIV>
<DIV>//-------code----------------------</DIV>
<DIV>&nbsp;if(extension == "raw")<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//declarations<BR>&nbsp;&nbsp;typedef itk::Image&lt; short, 3&gt; ImageType;<BR>&nbsp;&nbsp;typedef itk::ImageFileReader&lt; ImageType &gt; ReaderType;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;//initialisations<BR>&nbsp;&nbsp;ReaderType::Pointer reader = ReaderType::New();<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;//provide minimum info<BR>&nbsp;&nbsp;reader-&gt;SetFileName("myImage.mhd");<BR>&nbsp;<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;reader-&gt;Update();</DIV>
<DIV>&nbsp;&nbsp;}</DIV>
<DIV>&nbsp;&nbsp;catch(itk::ExceptionObject &amp;exception)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;CString msg;<BR>&nbsp;&nbsp;&nbsp;msg.Format("Erreur: %s", exception.GetDescription());<BR>&nbsp;&nbsp;&nbsp;AfxMessageBox(msg, MB_ICONERROR);<BR>&nbsp;&nbsp;}</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;//Create a device context to load the bitmap into<BR>&nbsp;&nbsp;CPaintDC dc(this); <BR>&nbsp;&nbsp;dcMem.CreateCompatibleDC(&amp;dc);</DIV>
<DIV>&nbsp;&nbsp;if(GrabRAWFrame(1) != NULL) Invalidate();<BR>&nbsp;&nbsp;else AfxMessageBox("erreur a creation de image BMP\n");</DIV>
<DIV>&nbsp;}</DIV>
<DIV>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>HBITMAP CSequenceAvi::GrabRAWFrame(int frame)<BR>{<BR>&nbsp;//declarations<BR>&nbsp;typedef short PixelType;</DIV>
<DIV>&nbsp;typedef itk::Image&lt; PixelType, 2 &gt; ImageType2D;<BR>&nbsp;typedef itk::Image&lt; PixelType, 3 &gt; ImageType3D;<BR>&nbsp;&nbsp;<BR>&nbsp;typedef itk::ImageFileReader&lt; ImageType3D &gt; ReaderType;<BR>&nbsp;typedef itk::ExtractImageFilter&lt; ImageType3D, ImageType2D &gt; ExtractType;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;//initialisations<BR>&nbsp;ReaderType::Pointer reader = ReaderType::New();<BR>&nbsp;ExtractType::Pointer extractFilter = ExtractType::New();</DIV>
<DIV>&nbsp;reader-&gt;SetFileName("myImage.mhd");<BR>&nbsp;reader-&gt;Update();</DIV>
<DIV>&nbsp;ImageType3D::RegionType inputRegion = <BR>&nbsp;&nbsp;reader-&gt;GetOutput()-&gt;GetLargestPossibleRegion();</DIV>
<DIV>&nbsp;ImageType3D::SizeType size = inputRegion.GetSize();<BR>&nbsp;size[2] = 0;</DIV>
<DIV>&nbsp;ImageType3D::IndexType start = inputRegion.GetIndex();<BR>&nbsp;start[2] = frame;</DIV>
<DIV>&nbsp;//creation of an image region<BR>&nbsp;ImageType3D::RegionType desiredRegion;<BR>&nbsp;desiredRegion.SetSize(size);<BR>&nbsp;desiredRegion.SetIndex(start);</DIV>
<DIV>&nbsp;//region passed to filter to extract<BR>&nbsp;extractFilter-&gt;SetExtractionRegion(desiredRegion);</DIV>
<DIV>&nbsp;//connect an d execute<BR>&nbsp;extractFilter-&gt;SetInput(reader-&gt;GetOutput());<BR>&nbsp;try{<BR>&nbsp;&nbsp;extractFilter-&gt;Update();<BR>&nbsp;}<BR>&nbsp;catch(itk::ExceptionObject &amp;exception)<BR>&nbsp;{<BR>&nbsp;&nbsp;CString msg;<BR>&nbsp;&nbsp;msg.Format("Erreur: %s", exception.GetDescription());<BR>&nbsp;&nbsp;AfxMessageBox(msg, MB_ICONERROR);<BR>&nbsp;}</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;//get the data<BR>&nbsp;ImageType2D::Pointer image = extractFilter-&gt;GetOutput();<BR>&nbsp;short* pData = extractFilter-&gt;GetOutput()-&gt;GetBufferPointer();</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;BITMAPINFOHEADER bih;<BR>&nbsp;memset(&amp;bih, 0, sizeof(BITMAPINFOHEADER));</DIV>
<DIV>&nbsp;bih.biBitCount=24; //16 bits per pixel<BR>&nbsp;bih.biClrImportant=0;<BR>&nbsp;bih.biClrUsed=0;<BR>&nbsp;bih.biCompression=BI_RGB;//uncompressed format<BR>&nbsp;bih.biPlanes=1;//always<BR>&nbsp;bih.biSize= 40; //nb of bytes required by the structure BITMAPINFOHEADER<BR>&nbsp;bih.biWidth=width;<BR>&nbsp;bih.biHeight=height;<BR>&nbsp;bih.biXPelsPerMeter=0;<BR>&nbsp;bih.biYPelsPerMeter=0;<BR>&nbsp;bih.biSizeImage=((((bih.biWidth * bih.biBitCount)+31)&amp; ~31) &gt;&gt;3)*bih.biHeight;<BR>&nbsp;//0 for uncompressed images</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;//on cree l image<BR>&nbsp;CPaintDC dc(this);<BR>&nbsp;HBITMAP hBitmap = CreateDIBitmap(dc,//handle of device context<BR>&nbsp;&nbsp;&nbsp;&nbsp; (BITMAPINFOHEADER*)&amp;bih,//address of bitmap size and format data<BR>&nbsp;&nbsp;&nbsp;&nbsp; CBM_INIT,//initialization flag<BR>&nbsp;&nbsp;&nbsp;&nbsp; pData,//address of initialization data<BR>&nbsp;&nbsp;&nbsp;&nbsp; (BITMAPINFO*)&amp;bih,//address of bitmap color format data<BR>&nbsp;&nbsp;&nbsp;&nbsp; DIB_RGB_COLORS);//color data usage</DIV>
<DIV>&nbsp;return hBitmap;<BR>}</DIV>
<DIV><BR>void CSequenceAvi::OnPaint() <BR>{<BR>&nbsp;CPaintDC dc(this); // device context for painting<BR>&nbsp;<BR>&nbsp;// TODO: Add your message handler code here<BR>&nbsp;ShowBitmap(&amp;dc);</DIV>
<DIV>&nbsp;//Draw rectangle<BR>&nbsp;SetPenBrush(&amp;dc);<BR>&nbsp;dc.Rectangle(rect_roi);<BR>&nbsp;ResetPenBrush(&amp;dc);<BR>}</DIV>
<DIV><BR>void CSequenceAvi::ShowBitmap(CPaintDC *pDC)<BR>{<BR>&nbsp; &nbsp;//Sélectionner 1 nouvel objet en memoire, détruire l’ancien&nbsp;<BR>&nbsp;HGDIOBJ pOldObj = SelectObject(dcMem,hBitmap);<BR>&nbsp;if(pOldObj) DeleteObject(pOldObj);<BR>&nbsp;<BR>&nbsp;//draw avi file in a fixed rectangle<BR>&nbsp;CRect rect;<BR>&nbsp;GetDlgItem(IDC_RECT)-&gt;GetWindowRect(rect);<BR>&nbsp;ScreenToClient(rect);//convert coord of rect on screen to client area coord<BR>&nbsp;<BR>&nbsp;//move the bitmap from the memory to the screen<BR>&nbsp;pDC-&gt;StretchBlt(0,0,rect.Width(),rect.Height(),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;dcMem, 0,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width, height,SRCCOPY);<BR>}</DIV></DIV></DIV><p>
                <hr size=1> 
Découvrez le nouveau Yahoo! Mail : <font color="red">1 Go d'espace</font> de stockage pour vos mails, photos et vidéos !<br><a href="http://us.rd.yahoo.com/mail_fr/mail_campaigns/splash/taglines_1go/default/*http://fr.promotions.yahoo.com/mail/creer28.html" target="_blank">Créez votre Yahoo! Mail</a>