利用Opencv在PictureControl中显示照片


利用Opencv在PictureControl中显示IplImage格式的照片。

bool MyDlg::IfExistFile(CString strFilePath)
{
    CFile file;
    if (file.Open(strFilePath,CFile::modeRead))
    {
        file.Close();
        return true;
    }
    return false;
}

bool MyDlg::FillBlankToPicCtrl(const int& nID)
{
    CDC *pDC = GetDlgItem(nID)->GetDC();
    CRect rect;
    GetDlgItem(nID) ->GetClientRect( &rect );
    pDC->FillSolidRect(rect, GetSysColor(COLOR_ACTIVEBORDER));//填充当前背景色
    ReleaseDC(pDC);
    
    return true;
}

void MyDlg::ShowIplImage(IplImage* img, const int& nID)
{
    BITMAPINFO bifInfo;
    int nBpp = img ? (img->depth & 255) * img->nChannels : 0 ;
    FillBitmapInfo(&bifInfo, img->width, img->height, nBpp);
    ShowImageInWindow(img, GetDlgItem(nID), bifInfo);
}

void MyDlg::FillBitmapInfo( BITMAPINFO *bmi, int width, int height, int bpp)
{
    ASSERT( bmi && width > 0 && height > 0 &&
        (bpp == 8 || bpp == 24 || bpp == 32) ); 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;
    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;
        }
    }
}

void MyDlg::ShowImageInWindow(IplImage *pImg, CWnd *wnd, BITMAPINFO &bmi)
{
    CDC *pDC = wnd->GetDC();
    HDC  hDC = pDC->GetSafeHdc();
    CRect rect;
    wnd->GetClientRect(&rect);
    if(bmi.bmiHeader.biBitCount== 8)
    {
        CPalette pal;
        HPALETTE hpal=NULL;
        HPALETTE hOldPal=NULL;
        ::SetPaletteEntries(hpal,0,256,(LPPALETTEENTRY)bmi.bmiColors);
        hOldPal = ::SelectPalette(pDC->GetSafeHdc(), hpal, TRUE);
    }
    ::SetStretchBltMode(pDC->m_hDC, COLORONCOLOR);
    ::StretchDIBits(pDC->GetSafeHdc(),rect.left,rect.top,pImg->width,pImg->height,0,0,
        pImg->width,pImg->height,pImg->imageData,&bmi,DIB_RGB_COLORS,SRCCOPY);
    ReleaseDC(pDC);
}

优质内容筛选与推荐>>
1、java不定参数列表---乔老师没讲,但是传智有讲
2、从业两年前端工程狮需要具备哪些技能?
3、initial list与assignment
4、关于C++构造函数: 一些杂谈和一次诡异的bug
5、JDBC之运用反射模拟ORM


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号