MFC 对话框中的picture control 控件显示图片

MFC读取图片一般使用自定义的DIB文件。DIB文件集中了处理图片的API函数,这样可以方便我们的图像操作。
DIB文件下载路径:DIB文件下载
MFC显示图片有几种方法:
1.在运行界面上选择 文件-打开 或者 直接点击打开快捷键
条件是在xxxDoc.cpp文件中加入

BOOL Cimageskitch0Doc::OnSaveDocument(LPCTSTR lpszPathName)
{
    // TODO: 在此添加专用代码和/或调用基类
    //+*****保存DIB图像
    CString strPathName;
    strPathName.Format("%s",lpszPathName);
    //+*****新建文件
    CFile file(strPathName,CFile::modeCreate|CFile::modeWrite);

    if(m_dib.WriteToFile(&file) == TRUE)
    {
        SetModifiedFlag(FALSE);     // have saved
        return TRUE;
    }
    else
        return FALSE;
    //return CDocument::OnSaveDocument(lpszPathName);
}

BITMAPINFO  CreateBitmapInfo(cv::Mat workImg)    // 建立位图信息
{                                           
   BITMAPINFOHEADER BIH={40,1,1,1,8,0,0,0,0,0,0};
   BITMAPINFO bmi;
   int bits, colors;
   RGBQUAD  ColorTab[256];
    if(CV_8UC3==workImg.type())
    {
        bits=24;
    }
    if(CV_8UC1==workImg.type())
    {
        bits=8;
    }    
   if(bits>8) 
        colors=0;
   else
        colors=1<<bits;   
   BIH.biWidth   =workImg.cols;     
    BIH.biHeight  =workImg.rows;
   BIH.biBitCount=(BYTE) bits;   
   bmi.bmiHeader=BIH;
    if(bits==8) 
    {                           // 256 色位图
        for(int i=0;i<256;i++)  
        {                // 设置灰阶调色板
           ColorTab[i].rgbRed=ColorTab[i].rgbGreen=ColorTab[i].rgbBlue=(BYTE)i;
        }
        memcpy(bmi.bmiColors,ColorTab, 1024);      
   }
   return(bmi);
}

这样,上述操作就可以显示图片了。
MFC 对话框中的picture control 控件显示图片_第1张图片
第二种方法,在对话框的picture control控件显示图片。
这种方法稍微麻烦。
首先在菜单栏编辑自己的菜单,比如本项目中 “图像匹配”,在下拉菜单下编辑“图像匹配”并修改ID号 :ID_IMAGEMATCH,然后为此菜单添加事件处理程序,选择类是View类。
然后再在资源视图中Dialog下插入dialog对话框。在上面加入几个picture control 控件。底部加入几个button控件。对话框属性的Border属性选为Resizing,这样对话框的大小就可以使用鼠标调节。修改对话框的控件的ID。
效果如下图:
MFC 对话框中的picture control 控件显示图片_第2张图片
接着为对话框添加类:CDlgImageMatchYG
匹配的事件响应程序就可以这样写:

void CImageMatchingView::OnImagematch() 
{
    // TODO: Add your command handler code here
    CImageMatchingDoc* pDoc = GetDocument();
    //pDoc = GetDocument();
    // 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的水平镜像,其它的可以类推)
    if(pDoc->m_pDibInit->m_nColorTableEntries != 256)  //pDoc->m_pDibInit在pDoc中初始化
    {
        // 提示用户
        MessageBox("目前只支持256色位图的图象配准!", "系统提示" , 
            MB_ICONINFORMATION | MB_OK);    
        // 返回
        return;
    }
    // 打开图象识别对话框
    CDlgImageMatchYG* pDlg = new CDlgImageMatchYG(NULL, pDoc);
    pDlg->DoModal();
    delete pDlg;
}

在事件处理程序中调用对话框对象。
在CDlgImageMatchYG类文件中,有几个函数比较重要。
OnPaint()函数,本函数由对话框对象自动调用,刷新对话框。
CalImageLocation(),自定义的设置对话框的控件位置和大小的函数。
本项目源码下载路径:mfc显示图片源码

你可能感兴趣的:(mfc,显示图片)