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

来源:互联网 发布:php 用ajax上传图片 编辑:程序博客网 时间:2024/05/16 17:10

使用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