void DisplayIplImageToPictureBox(IplImage* pImgIpl, CDC* pDC, CRect rect)
{
BITMAPINFO bitmapInfo;
bitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bitmapInfo.bmiHeader.biPlanes=1;
bitmapInfo.bmiHeader.biCompression=BI_RGB;
bitmapInfo.bmiHeader.biXPelsPerMeter=100;
bitmapInfo.bmiHeader.biYPelsPerMeter=100;
bitmapInfo.bmiHeader.biClrUsed=0;
bitmapInfo.bmiHeader.biClrImportant=0;
bitmapInfo.bmiHeader.biSizeImage=0;
bitmapInfo.bmiHeader.biWidth=pImgIpl->width;
bitmapInfo.bmiHeader.biHeight=-pImgIpl->height;
IplImage* tempImage=NULL;
if(pImgIpl->nChannels == 3)
{
tempImage = (IplImage*)cvClone(pImgIpl);
bitmapInfo.bmiHeader.biBitCount=tempImage->depth * tempImage->nChannels;
}
else if(pImgIpl->nChannels == 1)
{
tempImage = cvCreateImage(cvGetSize(pImgIpl), IPL_DEPTH_8U, 3);
cvCvtColor(pImgIpl, tempImage, CV_GRAY2BGR);
bitmapInfo.bmiHeader.biBitCount=tempImage->depth * tempImage->nChannels;
}
if( tempImage != NULL)
{
pDC->SetStretchBltMode(COLORONCOLOR);
::StretchDIBits(pDC->GetSafeHdc(), rect.left, rect.top, rect.right, rect.bottom,
0, 0, tempImage->width, tempImage->height, tempImage->imageData, &bitmapInfo,
DIB_RGB_COLORS, SRCCOPY);
cvReleaseImage(&tempImage);
}
}
void DrawFunction()
{
//code is omitted..
//~~~~
//~~~~~
CDC* vDC;
vDC = m_PicBox.GetDC(); //m_PicBox is PictureBox CStatic variable.
CRect rect;
m_PicBox.GetClientRect(&rect);
DisplayIplImageToPictureBox(img, vDC, rect); //img is IplImage* variable.
ReleaseDC(vDC);
//~~~
//~~~
}
..Example picture of display(drawing) IplImage * on a dialog

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information. Keep it up. Keep blogging. Looking to reading your next post.
ReplyDeletehttp://www.imagefidelity.co.uk