<DIV>Hi,</DIV>
<DIV>&nbsp;</DIV>
<DIV>I tried <STRONG>SetParentId()</STRONG> from <STRONG>vtkImageViewer </STRONG>to make my 2D image displayed in the window I pass. It works well. </DIV>
<DIV>&nbsp;</DIV>
<DIV>However, my image is still displayed with its own dimensions, not the window's one. Could someone suggest me a way to stretch my image to the window size like I used to do with StretchBlt(for HBITMAP).</DIV>
<DIV>&nbsp;</DIV>
<DIV>By the way, what's the difference between vtkImageViewer and vtkImageViewer2?</DIV>
<DIV>&nbsp;</DIV>
<DIV>Thanks a lot,</DIV>
<DIV>&nbsp;</DIV>
<DIV>ISabelle&nbsp;<BR><BR><I><STRONG>Mark Wyszomierski &lt;markww@gmail.com&gt;</STRONG></I> a écrit :</DIV>
<BLOCKQUOTE class=replbq style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid">Renaud,<BR><BR>If you call SetParentId() from vtkImageViewer, or vtkImageViewer2, the<BR>render context will be 'framed' within the window you passed as its<BR>parent, it works really well, and you don't need to deal with HBITMAPs<BR>etc.<BR><BR>If you don't want to do that, you are already using MFC, so look at<BR>the MFC class CImage. It really simplifies working with bitmaps at<BR>getting them painted to your dc.<BR><BR>Mark<BR><BR>On 5/20/05, Renaud Isabelle <RENAUISA@YAHOO.FR>wrote:<BR>&gt; <BR>&gt; Dear users,<BR>&gt; <BR>&gt; I have to build an user interface by using MS VC++ for medical image<BR>&gt; processing. Instead of having to compute reading of image files, I am using<BR>&gt; ITK-VTK but I am quite new in this.<BR>&gt; <BR>&gt; - I read a raw 3D image using ITK and, as you suggested in<BR>&gt;
 "http://public.kitware.com/pipermail/insight-users/2003-April/003345.html",<BR>&gt; I use itkExtractImageFilter to create a 2D image from the 3D volume and get<BR>&gt; the pixel data in a buffer with: <BR>&gt; extractFilter-&gt;GetOutput()-&gt;GetBufferPointer().<BR>&gt; <BR>&gt; - I would like to create a bitmap from this data using MFC classes to show<BR>&gt; the image in a frame of my user interface already built. To do so, I use<BR>&gt; HBitmap and CreateDIBitmap, but HBITMAP returned is NULL and nothing<BR>&gt; happens. <BR>&gt; <BR>&gt; - Can you suggest me a way to use VTK to display my image not in a modal<BR>&gt; window apart as implemented in vtkImageViewer, but in a frame of my<BR>&gt; interface?<BR>&gt; <BR>&gt; I joined a part of my code below. Please help me.<BR>&gt; <BR>&gt; Thanks in advance,<BR>&gt; <BR>&gt; Isabelle Renaud<BR>&gt; <BR>&gt; //-------code----------------------<BR>&gt; if(extension == "raw")<BR>&gt; {<BR>&gt; //declarations<BR>&gt; typedef
 itk::Image&lt; short, 3&gt; ImageType;<BR>&gt; typedef itk::ImageFileReader&lt; ImageType &gt; ReaderType;<BR>&gt; <BR>&gt; //initialisations<BR>&gt; ReaderType::Pointer reader = ReaderType::New();<BR>&gt; <BR>&gt; //provide minimum info<BR>&gt; reader-&gt;SetFileName("myImage.mhd");<BR>&gt; <BR>&gt; try<BR>&gt; {<BR>&gt; reader-&gt;Update();<BR>&gt; }<BR>&gt; catch(itk::ExceptionObject &amp;exception)<BR>&gt; {<BR>&gt; CString msg;<BR>&gt; msg.Format("Erreur: %s", exception.GetDescription());<BR>&gt; AfxMessageBox(msg, MB_ICONERROR);<BR>&gt; }<BR>&gt; <BR>&gt; //Create a device context to load the bitmap into<BR>&gt; CPaintDC dc(this); <BR>&gt; dcMem.CreateCompatibleDC(&amp;dc);<BR>&gt; if(GrabRAWFrame(1) != NULL) Invalidate();<BR>&gt; else AfxMessageBox("erreur a creation de image BMP\n");<BR>&gt; }<BR>&gt; }<BR>&gt; <BR>&gt; HBITMAP CSequenceAvi::GrabRAWFrame(int frame)<BR>&gt; {<BR>&gt; //declarations<BR>&gt; typedef short PixelType;<BR>&gt; typedef itk::Image&lt; PixelType, 2
 &gt; ImageType2D;<BR>&gt; typedef itk::Image&lt; PixelType, 3 &gt; ImageType3D;<BR>&gt; <BR>&gt; typedef itk::ImageFileReader&lt; ImageType3D &gt; ReaderType;<BR>&gt; typedef itk::ExtractImageFilter&lt; ImageType3D, ImageType2D &gt; ExtractType;<BR>&gt; <BR>&gt; //initialisations<BR>&gt; ReaderType::Pointer reader = ReaderType::New();<BR>&gt; ExtractType::Pointer extractFilter = ExtractType::New();<BR>&gt; reader-&gt;SetFileName("myImage.mhd");<BR>&gt; reader-&gt;Update();<BR>&gt; ImageType3D::RegionType inputRegion = <BR>&gt; reader-&gt;GetOutput()-&gt;GetLargestPossibleRegion();<BR>&gt; ImageType3D::SizeType size = inputRegion.GetSize();<BR>&gt; size[2] = 0;<BR>&gt; ImageType3D::IndexType start = inputRegion.GetIndex();<BR>&gt; start[2] = frame;<BR>&gt; //creation of an image region<BR>&gt; ImageType3D::RegionType desiredRegion;<BR>&gt; desiredRegion.SetSize(size);<BR>&gt; desiredRegion.SetIndex(start);<BR>&gt; //region passed to filter to extract<BR>&gt;
 extractFilter-&gt;SetExtractionRegion(desiredRegion);<BR>&gt; //connect an d execute<BR>&gt; extractFilter-&gt;SetInput(reader-&gt;GetOutput());<BR>&gt; try{<BR>&gt; extractFilter-&gt;Update();<BR>&gt; }<BR>&gt; catch(itk::ExceptionObject &amp;exception)<BR>&gt; {<BR>&gt; CString msg;<BR>&gt; msg.Format("Erreur: %s", exception.GetDescription());<BR>&gt; AfxMessageBox(msg, MB_ICONERROR);<BR>&gt; }<BR>&gt; <BR>&gt; //get the data<BR>&gt; ImageType2D::Pointer image = extractFilter-&gt;GetOutput();<BR>&gt; short* pData =<BR>&gt; extractFilter-&gt;GetOutput()-&gt;GetBufferPointer();<BR>&gt; <BR>&gt; BITMAPINFOHEADER bih;<BR>&gt; memset(&amp;bih, 0, sizeof(BITMAPINFOHEADER));<BR>&gt; bih.biBitCount=24; //16 bits per pixel<BR>&gt; bih.biClrImportant=0;<BR>&gt; bih.biClrUsed=0;<BR>&gt; bih.biCompression=BI_RGB;//uncompressed format<BR>&gt; bih.biPlanes=1;//always<BR>&gt; bih.biSize= 40; //nb of bytes required by the structure BITMAPINFOHEADER<BR>&gt; bih.biWidth=width;<BR>&gt;
 bih.biHeight=height;<BR>&gt; bih.biXPelsPerMeter=0;<BR>&gt; bih.biYPelsPerMeter=0;<BR>&gt; bih.biSizeImage=((((bih.biWidth * bih.biBitCount)+31)&amp; ~31)<BR>&gt; &gt;&gt;3)*bih.biHeight;<BR>&gt; //0 for uncompressed images<BR>&gt; <BR>&gt; //on cree l image<BR>&gt; CPaintDC dc(this);<BR>&gt; HBITMAP hBitmap = CreateDIBitmap(dc,//handle of device context<BR>&gt; (BITMAPINFOHEADER*)&amp;bih,//address of bitmap size and<BR>&gt; format data<BR>&gt; CBM_INIT,//initialization flag<BR>&gt; pData,//address of initialization data<BR>&gt; (BITMAPINFO*)&amp;bih,//address of bitmap color format data<BR>&gt; DIB_RGB_COLORS);//color data usage<BR>&gt; return hBitmap;<BR>&gt; }<BR>&gt; <BR>&gt; void CSequenceAvi::OnPaint() <BR>&gt; {<BR>&gt; CPaintDC dc(this); // device context for painting<BR>&gt; <BR>&gt; // TODO: Add your message handler code here<BR>&gt; ShowBitmap(&amp;dc);<BR>&gt; //Draw rectangle<BR>&gt; SetPenBrush(&amp;dc);<BR>&gt; dc.Rectangle(rect_roi);<BR>&gt;
 ResetPenBrush(&amp;dc);<BR>&gt; }<BR>&gt; <BR>&gt; void CSequenceAvi::ShowBitmap(CPaintDC *pDC)<BR>&gt; {<BR>&gt; //Sélectionner 1 nouvel objet en memoire, détruire l'ancien <BR>&gt; HGDIOBJ pOldObj = SelectObject(dcMem,hBitmap);<BR>&gt; if(pOldObj) DeleteObject(pOldObj);<BR>&gt; <BR>&gt; //draw avi file in a fixed rectangle<BR>&gt; CRect rect;<BR>&gt; GetDlgItem(IDC_RECT)-&gt;GetWindowRect(rect);<BR>&gt; ScreenToClient(rect);//convert coord of rect on screen to client area coord<BR>&gt; <BR>&gt; //move the bitmap from the memory to the screen<BR>&gt; pDC-&gt;StretchBlt(0,0,rect.Width(),rect.Height(),<BR>&gt; &amp;dcMem, 0,0,<BR>&gt; width, height,SRCCOPY);<BR>&gt; }<BR>&gt; <BR>&gt; ________________________________<BR>&gt; Découvrez le nouveau Yahoo! Mail : 1 Go d'espace de stockage pour vos mails,<BR>&gt; photos et vidéos !<BR>&gt; Créez votre Yahoo! Mail <BR>&gt; <BR>&gt; <BR>&gt; _______________________________________________<BR>&gt; Insight-users mailing list<BR>&gt;
 Insight-users@itk.org<BR>&gt; http://www.itk.org/mailman/listinfo/insight-users<BR>&gt; <BR>&gt; <BR>&gt;<BR></BLOCKQUOTE><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>