VC++图像处理程序设计(第1版) 杨淑莹 编著 边奠英 主审
第二章 图像的显示
Joanna-In-Hdu&Hust 手工打,印象更深刻
使用工具 VS2010 mfc
声明:这一章开始的代码都是本人实际演示过的,按照本人的操作可以运行。程序并没有很强的健壮性,只能对正确的操作做出符合预期的响应。
整本书的代码文件、测试图片和程序运行exe请在这里下载:https://github.com/CaptainLYN/VCPictureProcessing
由于这本书我已经做完很长时间了,对于文章中的文字的重点现在已是不甚记得了,所以在此为了避免误导,只贴出代码,代码中大都有我写这个代码时候的心得,基本上都是书中的代码,很多地方都有写注释哦,有问题的同学可以直接再代码中找一找答案~
相对于(错误百出的)原书有修改的地方大多都有说明。
说了这么多,突然想把这本书更新完,只是想做事情有始有终U•ェ•*U
正文:
一、CViewImage.h 中是第二章用到的所有函数的声明,其实是建了一个类:
1 #pragma once 2 class CDib; 3 class CViewImage:public CView 4 { 5 protected: 6 CPalette *hPalette;//这两个变量都是指针,为什么不是实体类呢?假如程序一次运行只打开一次文件,类是可以的;多次打开会出现内存错误(大家可以试一下),指针的话,没打开一次都是新建一个类,打开完了即没了,适合用指针 7 CDib *dib; 8 9 public: 10 11 void GetDib(CDib *dib2);//CObject是不能直接作为参数传递的,因为不能被复制,是私有函数 12 13 void virtual OnDraw(CDC *pDC);//CDC类是设备上下文类,用于绘图输出的,实现虚函数 14 void OnDraw2(CDC *pC,int x_move,int y_move);//原图像显示位置可以移动的绘图函数 15 void OnDraw3(CDC *pDC,LPBYTE temp,int x_move,int y_move); 16 void OnDraw4(CDC *pC,int x_move,int y_move,int need_width,int need_height);//可以在原图绘制想要的大小,并没有修改原图的info 17 18 CPalette* CreateBitmapPalette(CDib *pBitmap); 19 void OnXiangxia(CDC *pDC);//改成了有参数的,CDC在对话框中获取,在这个函数里面获取有中断问题,没解决为什么 20 void OnXiangshang(CDC *pDC);//向上扫描 21 void OnXiangyou(CDC *pDC);//向右扫描 22 void OnXiangzuo(CDC *pDC);//向左扫描 23 void ToShuiPingYouYi(CDC *pDC);//水平右移 24 void ToChuiZhiShangYi(CDC *pDC);//垂直上移 25 void ToJiaoChaFeiRu(CDC *pDC);//交叉飞入 26 void ToSiZhouKuoZhang(CDC *pDC);//四周扩张 27 void ToZhongJianShouSuo(CDC *pDC);//中间收缩 28 void ToShuiPingShanTiao(CDC *pDC);//水平栅条 29 void TOShuZhiShanTiao(CDC *pDC);//竖直栅条 30 void ToTuXiangJianXian(CDC *pDC);//图像渐显 31 void ToShuiPingBaiYeChuang(CDC* pDC);//水平百叶窗 32 void ToShuZhiBaiYeChuang(CDC* pDC);//垂直百叶窗 33 void ToMaSaiKeXianShi(CDC *pDC);//马赛克显示 34 35 };//这边少一个分号就多了20几个错误,因为include后面没有分号