您的位置:首页 > 运维架构

使用Window的DC把OpenCV读入的图像数据绘制出来

2010-02-01 17:05 465 查看
使用Window的DC把OpenCV读入的图像数据绘制出来

 

http://blog.csdn.net/hardVB/archive/2007/04/23/1575349.aspx
 
void OpenVCLoadPicture()
{
IplImage* pImg;
     CString strPathName;
     CFileDialog dlg(TRUE);
     CDC* pDC = this->GetDC();
     CRect rect;
     this->GetClientRect(&rect);
     if(dlg.DoModal()==IDOK)
{
           strPathName = dlg.GetPathName();
              // 加载一幅图片
          pImg = cvLoadImage(strPathName);
          BITMAPINFO bmi;
          FillBitmapInfo(&bmi,pImg->width,pImg->height,(pImg->depth)*(pImg->nChannels));
              // DC中绘制
          ::StretchDIBits(pDC->GetSafeHdc(), rect.left, rect.top, pImg->width, pImg->height, 0, 0,
pImg->width, pImg->height, pImg->imageData, &bmi,DIB_RGB_COLORS,SRCCOPY);
}
 
void  FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp )
{
ASSERT(bmi && width > 0 && height > 0 && (bpp == 8 || bpp == 24 || bpp == 32) );
 
// BMP信息头
    BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);
   
    memset( bmih, 0, sizeof(*bmih));
    bmih->biSize   = sizeof(BITMAPINFOHEADER);
    bmih->biWidth  = width;
    bmih->biHeight = -abs(height);
    bmih->biPlanes = 1;
    bmih->biBitCount = bpp;
    bmih->biCompression = BI_RGB;
   
       // 调色板的填充
       // 大于8的不需要调色板
    if( bpp == 8 )
    {
        RGBQUAD* palette = bmi->bmiColors;
        int i;
        for( i = 0; i < 256; i++ )
        {
            palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = (BYTE)i;
            palette[i].rgbReserved = 0;
        }
    }
}
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hardVB/archive/2007/04/23/1575349.aspx
 
 
 
 
 
 
 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  colors byte bi