您的位置:首页 > 其它

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

2015-10-23 16:26 323 查看
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);
}


这样,上述操作就可以显示图片了。



第二种方法,在对话框的picture control控件显示图片。

这种方法稍微麻烦。

首先在菜单栏编辑自己的菜单,比如本项目中 “图像匹配”,在下拉菜单下编辑“图像匹配”并修改ID号 :ID_IMAGEMATCH,然后为此菜单添加事件处理程序,选择类是View类。

然后再在资源视图中Dialog下插入dialog对话框。在上面加入几个picture control 控件。底部加入几个button控件。对话框属性的Border属性选为Resizing,这样对话框的大小就可以使用鼠标调节。修改对话框的控件的ID。

效果如下图:



接着为对话框添加类: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 显示图片