4.mfc-bmp图片灰度和双显

4.mfc-bmp图片灰度和双显

ID:6128413

大小:1000.41 KB

页数:8页

时间:2018-01-04

4.mfc-bmp图片灰度和双显_第1页
4.mfc-bmp图片灰度和双显_第2页
4.mfc-bmp图片灰度和双显_第3页
4.mfc-bmp图片灰度和双显_第4页
4.mfc-bmp图片灰度和双显_第5页
资源描述:

《4.mfc-bmp图片灰度和双显》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Eastmount制作第四课bmp图片双显和灰度<一>.Bmp图片双显和灰度原理为了方便后续的量化采样处理,这里首先要实现bmp图片双显的功能,即在menu的左边显示原图,把原图的文件头数据和信息头数据保存在全局变量数组中;同时建立一个临时的”picture.bmp”图片(默认保存路径在打开原图的位置),以后的操作对临时的图片进行处理。如图:左边为原图(彩图),右边为双显,同时在右边的临时图片进行处理。此图的处理是灰度(右边是灰度后的图片)。Eastmount制作(百度文库:BMP彩图转灰度图)1.什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,假如原来某

2、点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:浮点算法:Gray=R*0.3+G*0.59+B*0.11整数方法:Gray=(R*30+G*59+B*11)/100移位方法:Gray=(R*28+G*151+B*77)>>8;平均值法:Gray=(R+G+B)/3;(此程序采用算法)仅取绿色:Gray=G;通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。2.改变象素

3、矩阵的RGB值,来达到彩色图转变为灰度图加权平均值算法:根据光的亮度特性,其实正确的灰度公式应当是R=G=B=R*0.299+G*0.587+B0.144为了提高速度我们做一个完全可以接受的近似,公式变形如下:R=G=B=(R*3+G*6+B)/103.真正的24位真彩图与8位的灰度图的区别就在于,真彩图文件中没有调色板,灰度图有调色板,真彩图中的象素矩阵是RGB值,灰度图中的象素矩阵是调色板索引值。源代码只简单的改变象素矩阵的RGB值,来达到彩色图转为灰度图,并没有添加调色板;该程序未实现添加了调色板。Eastmount制作<二>.MFC实现双显和灰度第

4、一步:建立标记位1.在View.cpp文件中显示函数前建立标记位,即:voidCBmpDrawView::ShowBitmap(CDC*pDC,CStringBmpName)前添加:/*****************************************************//*numPicture=0时显示提示错误信息*//*numPicture=1时显示1张图片在OnFileOpen中定义*//*numPicture=2时显示2张图片和处理在处理函数中定义*//**************************************

5、***************//*****************************************************//*level=0时显示2张图片*//*level=1时显示灰度图片*//*level=3时显示图片采样*//*level=248163263时不同量化级量化图片*//*****************************************************/intnumPicture=0;//显示图片数intlevel=0;//显示量化等级2.在View.h中建立处理图像的副本文件和默认路径:CBi

6、tmapm_bitmaplin;//创建临时位图对象进行处理CStringBmpNameLin;//保存图像的副本文件原工程中3.在View.cpp的OnFileOpen文件打开函数中初始化标记变量:voidCBmpDrawView::OnFileOpen()中添加:if(dlg.DoModal()==IDOK){//获取路径文件名扩展文件名BmpName=dlg.GetPathName();BmpNameLin="picture.bmp";AfxMessageBox("图片打开成功",MB_OK,0);numPicture=1;EntName=dlg.G

7、etFileExt();EntName.MakeLower();//小写字符串Invalidate();}Eastmount制作第二步:报错处理指的是在没有载入图片(numPicture=0)时就按保存按钮,或双显、灰度、量化、采样按钮,就会提示相应的错误提示。因为在打卡图片OnFileOpen函数中令numPicture=1初始化才能显示图片及处理。在View.cpp中的函数voidCBmpDrawView::OnFileSave()中最前面增加代码如下://如果没有导入图片直接点击保存提示信息if(numPicture==0){AfxMessageBo

8、x("载入图片后才能保存图片!",MB_OK,0);return;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。