文档详情

基于MFC的图形图像处理方法.doc

发布:2017-07-09约6.72千字共12页下载文档
文本预览下载声明
基于MFC的图形图像处理 ——李明(08.2)2008200698 §1 MFC平台的简单应用 一 用C语言中自带的函数画点。 其步骤如下: 建立一个工程:“文件”——“新建”——选中“”-——” ”(在其中键入工程名称,如“TEST1”)—— (设置为自己想要存放的位置)——“确定”——“”——“完成”——“确定”。 左击“ ”即可出现所见工程中的所有类。若要实现画图功能,则必须要在其中的“”类中的“”函数中加入我们要实现功能所需要执行的代码。 现在可以先后通过工具栏中的“”、“”按钮进行编译执行。其结果如下: 图一 图一为空白的,那是因为我们没有在“”函数中加任何代码。(每次编译执行时,应把“图一”所示界面关闭,否者进行编译执行会出错。) 利用C语言中自带的函数画一个点: 双击“”-在函数“void CTEST1View::OnDraw(CDC* pDC)”提示的地方加上所要执行的代码,这里为:pDC-SetPixel(10,10,RGB(255,0,0));(该函数的前两个参数为所画点的位置坐标(x,y),第三个参数为其彩色值RGB三个分量各自的值)。经“”、“”后,其结果如下: 图二 可以看出所画此点极不清楚,我们可以自己编写一个画点函数。 二 改进的画点函数。 此方法的思想是:不只画出一个点P,同时也画出P附近的点。在图像中可看做显示一个像素及其领域中的像素。在这里以画出所有离P点水平和垂直距离均小于等于5的点为例。基于此思想,首先按照上一部分所说的“步骤1”建立一个工程“TEST2”,然后在“”函数中添加如下代码: for (int i=-5;i=5;i++) { for (int j=-5;j=5;j++) { pDC-SetPixel(10+i,10+j,RGB(255,0,0)); } } 经编译执行后可得: 图三 图二与图三相比,后者清楚了许多。这是因为图像是由许许多多的像素组成的,一个像素相对于整幅图来说是相当小的。故图二所画的一个点似乎是看不到的。 三 利用C语言中的函数直接画线。 如同前两部分,首先建立一个工程TEST3,然后在“”函数中执行如下命令: pDC-MoveTo(10,10); pDC-LineTo(100,100); 经编译执行后就画出了一条从点(10,10)至点(100,100)的直线。所画直线如下图所示: 图四 §2 生成直线的扫描转换算法 一 生成直线的DDA算法 图五 2.直线DDA算法描述: ,且(x1,y1)和(x2,y2)分别为所求直线的起点终点坐标  可通过计算由x方向的增量x引起y的改变来生成直线: =+x (1-) =m+b=m(+△x)+b= △x·m (1-)  也可通过计算由y方向的增量y引起x的改变来生成直线: =y (1-) ===+ (1-) 则 当时,。 (1-5) 为了减少误差积累,仅当|m|1是采用(1-6)的方法。 当|m|1时, 应用时,的方法。 (1-6) 3:DDA算法的实现: ①建立工程TEST4。 ②添加类Cline:右击“”——“New Class”——” ”的属性为“”;“ ”为“CLine”——“确定”。 ③添加类Cline的成员:右击“”——” Add Member Variable…”——” ”为“Cpoint”; “”为“point1”; “”——“确定”。用同样的方法加一个成员变量point2。 ④将Cline的数据成员初始化:双击“”——通过“ point1.x=0; point1.y=0;”将point1初始化。同样将point2初始化。 ⑤添加类Cline的带参数的构造函数: 在上一步的构造函数下面加上 CLine::CLine(int x1,int y1,int x2,int y2) { point1.x=x1; point1.y=y1; point2.x=x2; point2.y=y2; } 双击“”——在“CLine();”后面加上“CLine(int x1,int y1,int x2,int y2);” ⑥在类Cline中增加函数void CLine::CLineddaplot(CDC *pDC): 右击“”——“Add Member Function…”——“”为“void”;“ ”为“CLineddaplot(CDC *pDC)”——”确定”——双击函数“”添加基于DDA算法思想的画线函数代码。 ⑦在“”函数中的相应:双击“”类中的“”—— 在“TEST4View.cpp”的前面加上#includeLine.h——在void CTEST5View::OnDraw(CDC* pDC)提示的地方加入 CLine line(10,10,40,50); line.
显示全部
相似文档