最新C画图小程序汇总.docx

上传人:b****7 文档编号:25187774 上传时间:2023-06-05 格式:DOCX 页数:17 大小:22.14KB
下载 相关 举报
最新C画图小程序汇总.docx_第1页
第1页 / 共17页
最新C画图小程序汇总.docx_第2页
第2页 / 共17页
最新C画图小程序汇总.docx_第3页
第3页 / 共17页
最新C画图小程序汇总.docx_第4页
第4页 / 共17页
最新C画图小程序汇总.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

最新C画图小程序汇总.docx

《最新C画图小程序汇总.docx》由会员分享,可在线阅读,更多相关《最新C画图小程序汇总.docx(17页珍藏版)》请在冰豆网上搜索。

最新C画图小程序汇总.docx

最新C画图小程序汇总

 

C画图小程序

图像编辑软件

班级:

网工1班姓名:

张田新学号:

1225114042完成日期:

2014.05.16

一、需求分析

a)画线类型,即绘图时所采用的线型,包括:

实线、点线、长划线、点划线、双点划线等

b)绘图类型,即不同的绘图形状,包括:

直线、椭圆、矩形

c)填充类型,即画刷模式下的形状填充,包括:

实心、十字、斜纹等

d)画线颜色修改(按钮控件),弹出ColorDialog

e)清空按钮(按钮控件)

f)画线宽度(NumericUpDown控件)

g)画刷模式(复选框控件)

h)状态栏(在绘画时显示当前光标所处坐标位置)

i)其它:

组合框、控件标题属性等

二、框架设计

1、窗口

Form1

publicpartialclassMainForm:

Form

{

publicMainForm()

{

InitializeComponent();

}

}

Form2

publicpartialclassForm2:

Form

{

publicForm2()

{

InitializeComponent();

}

}

2、设定数据类型定义:

PenMyPen=newSystem.Drawing.Pen(System.Drawing.Color.SaddleBrown,2);//定义画笔,并且初始化颜色和宽度

PointFpStart;//开始点坐标

PointFpEnd;//结束点坐标

PointFpWork;//移动点坐标

Booleanworking;//运动中

Booleanbrushmode;//画刷

Stringdmode="line";

ColorDialogColorDialog1=newColorDialog();//颜色对话框

BitmapmyBitmap=newBitmap(194,294);//位图上绘制图形,创建位图,大小为PictureBox1的尺寸

privateinttickcounts;//计时器

3、基本操作:

Form1:

自定义DrawShape函数,用于实现画图类型的实现

voidDrawShape()

MainForm_Load用于初始化绘图类型和画笔颜色

privatevoidMainForm_Load(objectsender,EventArgse)

在PictureBox1中添加MouseDown事件,用于记录绘图的起点

privatevoidPictureBox1_MouseDown_1(objectsender,MouseEventArgse)

在PictureBox1中添加MouseMove事件,显示鼠标的位置,并画连续线

privatevoidPictureBox1_MouseMove(objectsender,System.Windows.Forms.MouseEventArgse)

在PictureBox1中添加MouseUp事件,用于设置绘图终点并开始绘图

privatevoidPictureBox1_MouseUp(objectsender,System.Windows.Forms.MouseEventArgse)

button1的Click事件,用于设置画笔颜色,显示颜色对话框

privatevoidbutton1_Click(objectsender,EventArgse)

BtnClear的Click事件,用PictureBox1的背景颜色清空绘图区域和位图

privatevoidBtnClear_Click(objectsender,EventArgse)

checkBox2_CheckedChanged事件,用于设置启动定时器

privatevoidcheckBox2_CheckedChanged_1(objectsender,EventArgse)

在定时器控件Tick事件中添加响应代码,用于改变状态栏颜色

privatevoidtimer1_Tick_1(objectsender,EventArgse)

右键剪切功能

privatevoidcutToolStripMenuItem_Click(objectsender,EventArgse)

右键粘贴功能

privatevoidpasteToolStripMenuItem_Click(objectsender,EventArgse)

右键清空功能

privatevoidclearToolStripMenuItem_Click(objectsender,EventArgse)

右键保存,需要先添加saveFileDialog对话框,显示该对话框

privatevoidsaveFileDialog2_FileOk(objectsender,CancelEventArgse)

右键about点击事件,显示新的窗体,需要新建Form2

privatevoidaboutToolStripMenuItem_Click(objectsender,EventArgse)

给pctureBox1添加paint事件,使窗口重绘后内容不消失

privatevoidpictureBox1_Paint(objectsender,PaintEventArgse)

Form2:

Label控件、panel

linkLabel1_LinkClicked用于点击链接相应的网址

三、实现细节

privatevoidPictureBox1_MouseUp(objectsender,MouseEventArgse)

{

if(e.Button==MouseButtons.Left)

{

if(working==true)

{

pEnd.X=e.X;

pEnd.Y=e.Y;

MyPen.Color=button1.BackColor;

MyPen.Width=(int)numericUpDown1.Value;

brushmode=checkBox1.Checked;

//a)画线类型,即绘图时所采用的线型,包括:

实线、点线、长划线、点划线、双点划线等

if(rbShiline.Checked==true)

MyPen.DashStyle=System.Drawing.Drawing2D.DashStyle.Solid;

if(rbDianline.Checked==true)

MyPen.DashStyle=System.Drawing.Drawing2D.DashStyle.Dot;

if(rbChanghualine.Checked==true)

MyPen.DashStyle=System.Drawing.Drawing2D.DashStyle.Dash;

if(rbZidingyi.Checked==true)

MyPen.DashStyle=System.Drawing.Drawing2D.DashStyle.Custom;

if(rbShuangdianline.Checked==true)

MyPen.DashStyle=System.Drawing.Drawing2D.DashStyle.DashDotDot;

if(rbDianhualine.Checked==true)

MyPen.DashStyle=System.Drawing.Drawing2D.DashStyle.DashDot;

//b)绘图类型,即不同的绘图形状,包括:

直线、椭圆、矩形

if(rbZhiline.Checked==true)

dmode="line";

if(rbTuoyuan.Checked==true)

dmode="circle";

if(rbJuxing.Checked==true)

dmode="rect";

if(rbXiewen.Checked==true)

MyPen.Brush=new

System.Drawing.Drawing2D.HatchBrush(

System.Drawing.Drawing2D.HatchStyle.DarkDownwardDiagonal,

MyPen.Color);

//c)填充类型,即画刷模式下的形状填充,包括:

实心、十字、斜纹等

if(rbShizi.Checked==true)

MyPen.Brush=new

System.Drawing.Drawing2D.HatchBrush(

System.Drawing.Drawing2D.HatchStyle.Cross,MyPen.Color);

if(rbShixin.Checked==true)

MyPen.Brush=newSolidBrush(MyPen.Color);

DrawShape(PictureBox1.CreateGraphics(),

pStart,pEnd,brushmode,MyPen,dmode);

working=false;

}

}

}

Case:

画直线

switch(dmode)

{

case"line":

g.DrawLine(MyPen,pStart,pEnd);

e.DrawLine(penmode,startp.X,startp.Y,endp.X,endp.Y);

break;

case:

矩形:

case"rect":

//当第二点的X或Y坐标小于第一点时,矩形无法绘制的问题(bug)

if((int)endp.Y>(int)startp.Y&&(int)endp.X>(int)startp.X)

{

if(brushmode==true)

{

g.FillRectangle(MyPen.Brush,rect1);

e.FillRectangle(penmode.Brush,rect1);

}

else

g.DrawRectangle(MyPen,rect1);

e.DrawRectangle(penmode,rect1);

}

//当第二点的Y坐标小于第一点时,矩形无法绘制的问题

if((int)endp.Y<(int)startp.Y&&(int)endp.X>(int)startp.X)

{

if(brushmode==true)

{

g.FillRectangle(MyPen.Brush,rect2);

e.FillRectangle(penmode.Brush,rect2);

}

else

g.DrawRectangle(MyPen,rect2);

e.DrawRectangle(penmode,rect2);

}

//当第二点的X坐标小于第一点时,矩形无法绘制的问题

if((int)endp.Y>(int)startp.Y&&(int)endp.X<(int)startp.X)

{

if(brushmode==true)

{

g.FillRectangle(MyPen.Brush,rect3);

e.FillRectangle(penmode.Brush,rect3);

}

else

g.DrawRectangle(MyPen,rect3);

e.DrawRectangle(penmode,rect3);

}

//当第二点的X和Y坐标小于第一点时,矩形无法绘制的问题

if((int)endp.Y<(int)startp.Y&&(int)endp.X<(int)startp.X)

{

if(brushmode==true)

{

g.FillRectangle(MyPen.Brush,rect4);

e.FillRectangle(penmode.Brush,rect4);

}

else

g.DrawRectangle(MyPen,rect4);

e.DrawRectangle(penmode,rect4);

}

break;

case画椭圆:

case"circle":

if(brushmode==true)

{

g.FillEllipse(MyPen.Brush,rect1);

e.FillEllipse(penmode.Brush,rect1);

}

else

g.DrawEllipse(MyPen,rect1);

e.DrawEllipse(penmode,rect1);

break;

 

d)画线颜色修改(按钮控件),弹出ColorDialog

privatevoidbutton1_Click_1(objectsender,EventArgse)

{

ColorDialog1.ShowDialog();

button1.BackColor=ColorDialog1.Color;

}

e)清空按钮(按钮控件)

privatevoidBtnClear_Click(objectsender,EventArgse)

{

PictureBox1.CreateGraphics().Clear(PictureBox1.BackColor);

Graphicsg=Graphics.FromImage(myBitmap);

g.Clear(PictureBox1.BackColor);

}

f)画线宽度(NumericUpDown控件)

MyPen.Width=(int)numericUpDown1.Value;

g)画刷模式(复选框控件)

if(brushmode==true)

{

g.FillRectangle(MyPen.Brush,rect1);//利用位图画矩形

e.FillRectangle(penmode.Brush,rect1);

}

h)状态栏(在绘画时显示当前光标所处坐标位置)

privatevoidcheckBox2_CheckedChanged_1(objectsender,EventArgse)

{

tickcounts=0;

if(checkBox2.Checked==true)

timer1.Start();//启动定时器

timer1.Enabled=true;

}

privatevoidtimer1_Tick(objectsender,EventArgse)

{

if(tickcounts%4==0)//第一个颜色

statusStrip1.BackColor=arrColor[0];

if(tickcounts%4==1)

statusStrip1.BackColor=arrColor[1];

arrColor[0].ToString();

if(tickcounts%4==2)

statusStrip1.BackColor=arrColor[2];

if(tickcounts%4==3)

statusStrip1.BackColor=arrColor[3];

arrColor[1].ToString();

tickcounts++;

}

j)其它:

组合框、控件标题属性等

2.教材原例Bug修改(15分)

a)窗口刷新后图像消失问题

//给pctureBox1添加paint事件,使窗口重绘后内容不消失

privatevoidPictureBox1_Paint(objectsender,PaintEventArgse)

{

e.Graphics.DrawImage(myBitmap,0,0);

}

b)画矩形:

当第二点的X或Y坐标小于第一点时,矩形无法绘制的问题

当第二点的Y坐标小于第一点时,矩形无法绘制的问题

Rectanglerect2=newRectangle((int)startp.X,

(int)endp.Y,(int)(endp.X-startp.X),(int)(startp.Y-endp.Y));

if((int)endp.Y<(int)startp.Y&&(int)endp.X>(int)startp.X)

{

if(brushmode==true)

{

g.FillRectangle(MyPen.Brush,rect2);

e.FillRectangle(penmode.Brush,rect2);

}

else

g.DrawRectangle(MyPen,rect2);

e.DrawRectangle(penmode,rect2);

}

其他两种情况类似处理,这里不再赘述

c)鼠标的响应:

左键右键均响应,应修改为仅响应鼠标左键进行绘图操作

例如:

if(e.Button==MouseButtons.Left)//仅响应鼠标左键

{

working=true;

pStart.X=e.X;

pStart.Y=e.Y;

toolStripStatusLabel1.Text="["+e.X+","+e.Y+"]";

}

}

d)初始颜色问题,原初始颜色与背景色相同,无法显示图像

PenMyPen=newSystem.Drawing.Pen(System.Drawing.Color.SaddleBrown,2);

System.Drawing.Drawing2D.HatchStyle.DarkDownwardDiagonal,Color.SaddleBrown);

e)清空功能:

用原PictureBox背景来清空而不用Color属性所代表的颜色来清空绘图区

privatevoidBtnClear_Click_1(objectsender,EventArgse)

{

PictureBox1.CreateGraphics().Clear(PictureBox1.BackColor);//清空绘图区域®

Graphicsg=Graphics.FromImage(myBitmap);

g.Clear(PictureBox1.BackColor);//清空位图

}

3.特色功能

a)连续线:

即通常采用的画笔画出连续线条(20分)

//在PictureBox1中添加MouseMove事件,显示鼠标的位置,并画连续线

privatevoidPictureBox1_MouseMove(objectsender,MouseEventArgse)

{

Graphicsg=Graphics.FromImage(myBitmap);//位图

Graphicsh=PictureBox1.CreateGraphics();

if(e.Button==MouseButtons.Left)

{

if(working==true)

{

pWork.X=e.X;

pWork.Y=e.Y;

toolStripStatusLabel1.Text="["+e.X+","+e.Y+"]";

}

if(rbLianxuline.Checked==true)

{//画连续线

g.DrawLine(MyPen,pStart,pWork);//位图

h.DrawLine(MyPen,pStart.X,pStart.Y,pWork.X,pWork.Y);//pictureBox1

pStart.X=pWork.X;//将上一个终点作为新的起点

pStart.Y=pWork.Y;

}

}

}

b)timer复选框:

实现间隔的改变状态条背景色(10分)

//checkBox2_CheckedChanged事件,用于设置启动定时器

privatevoidcheckBox2_CheckedChanged_1(objectsender,EventArgse)

{

tickcounts=0;

if(checkBox2.Checked==true)

timer1.Start();//启动定时器

timer1.Enabled=true;

}

//改变复选框颜色

privatevoidtimer1_Tick(objectsender,EventArgse)

{

if(tickcounts%4==0)//第̨²一°?

个?

颜?

色¦?

statusStrip1.BackColor=arrColor[0];

if(tickcounts%4==1)

statusStrip1.BackColor=arrColor[1];

arrColor[0].ToString();

if(tickcounts%4==2)

statusStrip1.BackColor=arrColor[2];

if(tickcounts%4==3)

statusStrip1.BackColor=arrColor[3];

arrColor[1].ToString();

tickcounts++;

}

c)右键弹出上下文菜单:

剪切:

完成剪切图像功能(5分)

//---------右键的剪切功能--------------

privatevoidcutToolStripMenuItem_Click(objectsender,EventArgse)

{

Clipboard.SetDataObject(myBitmap,true);

PictureBox1.CreateGraphics().Clear(PictureBox1.BackColor);//pictureBox1绘图区域清空

Graphicsg=Graphics.FromImage(myBitmap);

g.Clear(PictureBox1.BackColor);//位图清空

}

粘贴:

完成图像粘贴(5分)

//--------右键粘贴功能-----------

privatevoidpasteToolStripMenuItem_Click(objects

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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