图形图像软件使用说明资料.docx

上传人:b****6 文档编号:5039951 上传时间:2022-12-12 格式:DOCX 页数:11 大小:464.55KB
下载 相关 举报
图形图像软件使用说明资料.docx_第1页
第1页 / 共11页
图形图像软件使用说明资料.docx_第2页
第2页 / 共11页
图形图像软件使用说明资料.docx_第3页
第3页 / 共11页
图形图像软件使用说明资料.docx_第4页
第4页 / 共11页
图形图像软件使用说明资料.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

图形图像软件使用说明资料.docx

《图形图像软件使用说明资料.docx》由会员分享,可在线阅读,更多相关《图形图像软件使用说明资料.docx(11页珍藏版)》请在冰豆网上搜索。

图形图像软件使用说明资料.docx

图形图像软件使用说明资料

软件使用说明书

1.软件作者QQ1208706282

2.开发环境visualstudio2005基于MFC编程平台

3.软件概述:

实现一个简单的图形处理和图像显示,包含人机交互形式(包括菜单、工具栏、对话框响应,鼠标点击及拖动)。

使用直线、圆、椭圆的几种经典扫描转换算法。

软件可以移动图形的位置亦可拖动改变直线,矩形等的大小,使用橡皮擦小工具可以清除选中图形,动态重绘的实现。

还有些细节操作不便赘述。

由于时间短暂,个人能力有限,软件只做到这种程度,程序中不免有bug,希望学弟们再接再厉不断完善。

其中直线扫描算法用到dda,bresenham,中点圆算法等(部分算法函数为voidCCanvas:

:

DDALine(CDC*pDC,intfx,intfy,intsx,intsy),voidCCanvas:

:

BresenhamLine(CDC*pDC,intx1,inty1,intx2,inty2),voidCCanvas:

:

MidpointCircle(CDC*pDC,intradius,intpx,intpy),voidCCanvas:

:

BresenhamCircle(CDC*pDC,intradius,intpx,intpy),voidCCanvas:

:

Midponitellispe(CDC*pDC,intx0,inty0,intx1,inty1))。

4.软件操作简单描述

(1)点击file菜单,在下拉菜单点击open,打开文件选择框载入图像,如下图所示:

(1)点击view菜单,在下拉菜单点击toolbar,statebar,控制工具栏,状态栏的显示。

(2)点击draw菜单,在下拉菜单点击line,实现画直线操作,效果如下:

(3)点击draw菜单,在下拉菜单点击circle,实现画圆操作,效果如下:

(5)点击draw菜单,在下拉菜单点击rectangle,实现画矩形操作,效果如下:

 

(6)点击draw菜单,在下拉菜单点击ellipse,实现画椭圆操作,效果如下:

 

(7)点击clear菜单,弹出对话框,实现了窗口间的交互,选择是否清空已画内容,如图:

(8)

左图为软件工具栏实现的操作依次为:

画矩形,画圆,画直线,橡皮擦,画椭圆,改变图形颜色为红色,改变图形颜色为绿色,改变图形颜色为蓝色,弹出颜色选择框改变图形颜色。

5.软件的综合应用,效果如下:

4.部分算法

voidCCanvas:

:

DDALine(CDC*pDC,intfx,intfy,intsx,intsy)

{

intdx=sx-fx;

intdy=sy-fy;

doublesteps;

if(abs(dx)>abs(dy))

steps=abs(dx);

else

steps=abs(dy);

if(steps==0)

{

pDC->SetPixel(fx,fy,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

return;

}

doublexincrem=dx/steps;

doubleyincrem=dy/steps;

doublex=fx,y=fy;

for(inti=0;i

{pDC->SetPixel((int)(x+0.5),(int)(y+0.5),RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

x+=xincrem;

y+=yincrem;

}

}

voidCCanvas:

:

BresenhamLine(CDC*pDC,intx1,inty1,intx2,inty2)

{

intdx=x2-x1;intsx=1;

intdy=y2-y1;intsy=1;

if(dx<0)

{

sx=-1;

dx=-dx;

}

if(dy<0)

{

sy=-1;

dy=-dy;

}

dx=dx<<1;//进位即*2

dy=dy<<1;

pDC->SetPixel(x1,y1,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

if(dy

{

intfraction=dy-(dx>>1);

while(x1!

=x2)

{

if(fraction>=0)

{

y1+=sy;

fraction-=dx;

}

fraction+=dy;

x1+=sx;

pDC->SetPixel(x1,y1,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

}

}

else

{

intfraction=dx-(dy>>1);

while(y1!

=y2)

{

if(fraction>=0)

{

x1+=sx;

fraction-=dy;

}

fraction+=dx;

y1+=sy;

pDC->SetPixel(x1,y1,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

}

}

}

voidCCanvas:

:

MidpointCircle(CDC*pDC,intradius,intpx,intpy)

{

//CDC*pDC=GetDC();

intx=0;

inty=radius;

intd=1-radius;

pDC->SetPixel(x+px,y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(y+px,x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-y+px,x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(x+px,-y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+px,-y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-y+px,-x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(y+px,-x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+px,y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

while(y>=x){

if(d<0)

d+=2*x+3;/*选择E*/

else{

d+=2*(x-y)+5;/*选择SE*/

y--;

}

x++;

pDC->SetPixel(x+px,y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(y+px,x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-y+px,x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(x+px,-y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+px,-y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-y+px,-x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(y+px,-x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+px,y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

}

//ReleaseDC(pDC);

}

voidCCanvas:

:

BresenhamCircle(CDC*pDC,intradius,intpx,intpy)

{

//CDC*pDC=GetDC();

intx=0;

inty=radius;

intd1=(x+1)*(x+1)+y*y-radius*radius;

intd2=radius*radius-(x+1)*(x+1)-(y-1)*(y-1);

intd=d1-d2;

pDC->SetPixel(x+px,y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(y+px,x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-y+px,x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(x+px,-y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+px,-y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-y+px,-x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(y+px,-x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+px,y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

while(y>=x){

if(d>=0)

{

y--;

}

x++;

d1=(x+1)*(x+1)+y*y-radius*radius;

d2=radius*radius-(x+1)*(x+1)-(y-1)*(y-1);

d=d1-d2;

pDC->SetPixel(x+px,y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(y+px,x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-y+px,x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(x+px,-y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+px,-y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-y+px,-x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(y+px,-x+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+px,y+py,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

}

//ReleaseDC(pDC);

}

voidCCanvas:

:

Midponitellispe(CDC*pDC,intx0,inty0,intx1,inty1)

{

inta=abs(x1-x0),b=abs(y1-y0),x,y,color=0;//定义中心在(x0,y0),长半轴为a,短半轴为b.

floatd1,d2;

x=0;y=b;

d1=b*b+a*a*(-b+0.25);//判别式

pDC->SetPixel(x+x0,y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+x0,-y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+x0,y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(x+x0,-y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

while(b*b*(x+1)

{

if(d1<=0)

{

d1+=b*b*(2*x+3);x++;

}

else

{

d1+=b*b*(2*x+3)+a*a*(-2*y+2);

x++;y--;

}

pDC->SetPixel(x+x0,y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+x0,-y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+x0,y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(x+x0,-y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

}

d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;

while(y>0)

{

if(d2<=0)

{

d2+=b*b*(2*x+2)+a*a*(-2*y+3);

x++;y--;

}

else

{

d2+=a*a*(-2*y+3);y--;

}

pDC->SetPixel(x+x0,y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+x0,-y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(-x+x0,y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

pDC->SetPixel(x+x0,-y+y0,RGB(m_dColorRed,m_dColorGreen,m_dColorBlue));

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1