(一)MFC读取并显示一幅位图图像,并获取鼠标点击位置的像素坐标和灰度值
题目是老师布置的一道作业题,要求用C或C++完成,但不能用VTK/Opencv等软件包,经过很多摸索之后实现了该功能,后续可能还有其他功能要实现,所以先写一篇博客记录下,一方面是方便自己以后使用,另一方面是给其他人做个参考,少走一些弯路。说不定以后学弟学妹们就看到了这篇博客(猜猜我是哪个学校的?)
一、作业要求
要求读取一幅位图图像,即BMP位图,并显示该图像在对话框内。鼠标点击该图像时,显示所点击的像素坐标值和RGB灰度分量。
编译环境:vs2015
二、实现步骤
(一)创建对话框MFC
选择基于对话框的MFC,其他后面的都是默认选项,所以可以直接点击完成即可。
点击完成之后出现如下对话框
把中间的对话框放大,把确定和取消两个botton修改为打开图片和保存图片,并增加一个图像控件框和五个编辑框,如下图所示
MFC创建就结束了
(二)添加程序
双击打开图片按钮添加程序,如下图所示
添加代码如下:
//打开文件 CString filter = (CString)"图像文件(*.bmp)|*.bmp;*.BMP||";//指明可供选择的文件类型和相应的扩展名CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, filter, NULL); //打开文件//按下确定按钮 dlg.DoModal() 函数显示对话框if (dlg.DoModal() == IDOK){//打开对话框获取图像信息CString BmpName = dlg.GetPathName(); //获取文件路径名 CString EntName = dlg.GetFileExt(); //获取文件扩展名EntName.MakeLower(); //将文件扩展名转换为一个小写字符if (EntName.Compare(_T("bmp")) == 0) //如果是bmp图片则打开显示{//定义变量存储图片信息BITMAPINFO *pBmpInfo; //记录图像信息头内容BYTE *pBmpData; //图像数据BITMAPFILEHEADER bmpHeader; //文件头BITMAPINFOHEADER bmpInfo; //信息头CFile bmpFile; //记录打开文件//以只读的方式打开文件 读取bmp图片各部分 bmp文件头 信息 数据if (!bmpFile.Open(BmpName, CFile::modeRead | CFile::typeBinary))return;if (bmpFile.Read(&bmpHeader, sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))return;if (bmpFile.Read(&bmpInfo, sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))return;pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];//为图像数据申请空间memcpy(pBmpInfo, &bmpInfo, sizeof(BITMAPINFOHEADER)); //存储图像信息头内容DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;//图像数据大小,单位为字节pBmpData = (BYTE*)new char[dataBytes];bmpFile.Read(pBmpData, dataBytes); //存储图像数据bmpFile.Close();//显示图像CStatic *pwnd = (CStatic*)GetDlgItem(IDC_STATIC); //里面的参数是图片控件的ID//pwnd->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE);pwnd->ModifyStyle(0xf, SS_BITMAP);pwnd->SetBitmap((HBITMAP)::LoadImage(GetModuleHandle(NULL), BmpName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));//打开图片}}
此时已经可以打开图片了,效果如下:
接下来天加显示坐标值和灰度值的代码:
在类向导里添加消息函数WM_LBUTTONDOWN
添加代码:
代码如下:
void CWJ_zuoye1Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值CRect rect;CWnd *pWnd = GetDlgItem(IDC_STATIC);pWnd->GetWindowRect(&rect);ScreenToClient(&rect);//先获取鼠标相对于屏幕的坐标GetCursorPos(&point);int temp_x = point.x;int temp_y = point.y;//然后得到static控件的rect坐标CRect pRect;pWnd->GetClientRect(&pRect);//最后把当前鼠标的坐标转化为相对于rect的坐标pWnd->ScreenToClient(&point);int x = point.x;int y = point.y;SetDlgItemInt(IDC_EDIT1, x); //写入坐标值SetDlgItemInt(IDC_EDIT2, y); //写入HDC hDC = ::GetDC(NULL);COLORREF rgb = ::GetPixel(hDC, temp_x, temp_y);int r = GetRValue(rgb);int g = GetGValue(rgb);int b = GetBValue(rgb);SetDlgItemInt(IDC_EDIT3, r); //写入SetDlgItemInt(IDC_EDIT4, g); //写入SetDlgItemInt(IDC_EDIT5, b); //写入CDialogEx::OnLButtonDown(nFlags, point);
}
编辑运行:
大概就是这么个情况,时间有限,下一篇我将讲一下上面的代码含义以及相关引用 ,对代码含义有要求的同学可以看我的下篇博客
(一)MFC读取并显示一幅位图图像,并获取鼠标点击位置的像素坐标和灰度值相关推荐
- (一)MFC读取并显示一幅位图图像,并获取鼠标点击位置的像素坐标和灰度值(接上篇博客)
上篇博客简要介绍了如何利用MFC读取并显示一幅位图图像,并获取鼠标点击位置的像素坐标和灰度值信息,主要包含了对话框的创建和添加程序,代码也在上一页中给了大家,但是并没有详细说明功能,所以在这一节当中主 ...
- vs2015+opencv3.2+mfc读取摄像头显示在图片控件Picture Control
vs2015 + opencv3.3 + mfc读取摄像头显示在图片控件Picture Control 要开始做一个行人检测的小项目,首先读取出摄像头显示,参考了这位博主的教程:http : //bl ...
- QT编写实现图片的幻灯片播放、自适应显示、缩放(以鼠标位置为中心进行缩放)、拖动、重置、显示鼠标位置像素坐标及RGB值、播放GIF动画、截图保存、批量保存、拖入文件夹遍历所有文件
这个图片查看器功能很多,是我花了不少心思,不断优化,不断添加功能的成果: 1.能打开并显示所有常用图片格式文件,显示鼠标位置像素坐标及RGB值 2.能缩放,拖动图片,可以以鼠标为中心滚动滚轮进行缩放 ...
- 利用opengl+MFC读取并显示文本与二进制格式的stl
一. 配置opengl与vs2015 参考:https://blog.csdn.net/qq_24990189/article/details/89631111 二.所有代码: // OpenGLVi ...
- 详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示
详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示 目录 01-详解函数imread():读取图像文件 02-详解函数imshow():显示图像 03-使用 ...
- OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
需要源码和图片请点赞关注收藏后评论区留言私信~~~ OpenCV的作用在于让开发人员更容易地通过编码来处理图像.那么,处理图像需要执行哪些操作呢?图像处理的基本操作包含4个方面的内容:读取图像.显示图 ...
- 在MFC程序中显示 JPG/GIF图像
如果你是一个使用VB编程的程序员,要在程序中显示JPG或者GIF图像简直易如反掌,将图像控件拖到Form中,分分钟即可搞掂.但是C++程序员要显 示同样的图形却没有那么轻松,那么是不是要自己编写JP ...
- 数字图像处理(极简) 第三章 BMP文件的读取与显示(docx)
建议先修课程:高等数学(微积分).线性代数. 参考书目: 1.图像工程(上册)--图像处理(第4版) 章毓晋 清华大学出版社 链接:https://pan.baidu.com/s/1hEMGRUotQ ...
- [转载] OpenCV-Python 图像处理(二):图像的读取、显示与保存
参考链接: Python OpenCV 基础 2 : imwrite 保存图像 说明: 本系列主要是学习OpenCV-Python文档的个人笔记.很少有理论的叙述,都是函数名.参数描述.作用.应用场景 ...
最新文章
- 开源生态也难逃“卡脖子”危机?中国AI开发者的警醒和突围
- 基于python的分类预测_机器学习算法(五): 基于支持向量机的分类预测
- 你的计算机无法启动一键还原,教你电脑怎么一键还原
- autoconf和automake的安装与使用
- Ubuntu 16.04.6 LTS 发布:紧急修复 APT 漏洞
- SAP UI5 应用开发教程之二十九 - SAP UI5 的路由和导航功能介绍
- Android点击返回键销毁自己,Activity界面销毁 软键盘未收回
- selenium 基本的键盘方法
- linux系统中用户和组的管理
- [python] 为 pip 更换国内源
- JVM学习笔记四_垃圾收集器与内存分配策略
- pycharm 安装JPype
- Duilib中caption的问题
- 添加CNZZ统计代码
- 独孤九剑之js操作数组
- 怎么看电脑的hdmi是输出还是输入_怎么看电脑显示器有没有hdmi接口
- 支持向量机中所谓的支持向量究竟是什么?
- 2012/5/9武汉佰钧成
- 3.7 矩阵最小二乘广义逆
- 华为任正非最新发声:活下来!