Java实训课程设计报告
Windows画图工具
专 业: 计算机科学与技术 班 级: 11092311 姓 名: 曾思哲
学 号:
20xx年6月
Java实训课程设计报告
项目简介
1
Java实训课程设计报告
Windows画图工具的设计
第1章 需求分析
1.1 项目背景
随着社会的不断发展,人们对画面要求越来越高,对画图工具的软件提出了更高的要求。
画图工具的软件可以让用户更加节省时间,可以从其他文件找出一些图片修改一下就可以使用,比起传统的手工的画图来说,不单单是节省时间而且画面要好的多,保存起来也比较方便,下次在用的时候一找就出来了。在比如画面的修改在这套软件上我们可以直接使用彩色,使画面更直观,而且还可以修改,画图的软件现在应用于各行各业,这款软件特别适合教学用,学生画图也是比不可缺少的。
1.2 需求分析
需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,通过对用户问题的分析,确定系统的功能需求。这个步骤是对理解需求的升华,直接关系到该系统的质量。分析的根本目的是在开发者和提出需求的人之间建立一种理解和沟通机制,因此,系统的需求分析也应该是开发人员和用户或客户一起完成的。
1.2.1画图板的性能要求
(1) 统一处理的准确性和及时性。
(2) 软件的开放性和可扩充性。
(3) 软件的易用性和易维护性。
1.2.2画图板的功能分析
我们作的是Windows画板,再设计时应该考虑到用户的需要和画图的习惯。所以我们需求分析的主要任务就是来了解用户画图时的习惯。尽量让用户满意。在此我们是先设计一个大概的程序模型让别人试试我的画图板。
2
Java实训课程设计报告
第2章 概要设计
2.1 软件设计
1.1.1 本软件是设计一套在windows平台下的画图工具,主要用于主要用于画图、打开图画类的页面修改并保存成用户需要的格式。系统采用C/S结构,主要用于客户端,供客户学习、工作使用,本软件提供良好的界面,操作简单。
第3章 详细设计
3.1 模块设计
该系统由4个模块构成,分别是工具模块、储存模块、颜色模块、帮助模块。 ? 工具模块
画笔(PencilTool)、格式刷(BrushTool)、喷墨工具(AtomizerTool)、橡皮(EraserTool)、直线(LineTool)等主要用于不同情况的使用,在面板上方便用户的使用。
? 储存模块
① 判断当前画板是否保存(MyImage)。
② 设置多种存储的格式供用户选择,增加文件过滤器(addFilter)。
③ 存储路径可以设置默认的。
? 颜色模块
通过创建颜色选择器(ColorChooser),来让用户获取颜色,供用户使用。
? 帮助模块
系统帮助文档和软件的声明。
3.2 功能设计
主要功能如下:
1、画笔 PencilTool这个类继承于AbstractTool类,PencilTool类中有个对象Tool用户通过点击画板上的图标来获取画笔,它的功能让用户用来画出各种图形。
2、格式刷子 BrushTool这个类继承于AbstractTool类,它的功能让用户画出更好的图形。
3
Java实训课程设计报告
3、喷墨工具AtomizerTool这个类继承于AbstractTool类,AtomizerTool类中有个对象Tool用户通过点击画板上的图标来获取喷墨图标,它的功能让用户用来涂颜色用的。
4、橡皮EraserTool这个类继承于AbstractTool类,它的功能用来修改画板上画错的线或者图形。
5、直线LineTool这个类继承于AbstractTool类,它的功能:让用户画出更好的直线。
6、储存MyImage 这个类继承BufferedImage类,主要用来判断当前的文件是否保存。
7、界面ImageFrame这个类继承Jframe类,主要用来创建界面,初始化屏幕的尺寸、设置默认画板。
3.3 界面演示
图为主界面
4
Java实训课程设计报告
图1 图为颜色编辑界面
第4章 编码实现
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Diagnostics;
using System.Drawing.Printing;
namespace 画图板
{
public partial class drawinboard : Form
{
//private DrawTools dt;
Graphics g; //创建绘画的面板or Panel to create paintings
Point pStart; Point PEnd; //定义画图颜色的起点和终点or Define the drawing start point and end point color
int ChoiceGraph; //所选颜色图像枚举or The selected color image. int penWideth; //画图宽度
enum myselected //定义枚举
{
pencil, // 定义铅笔
Line, // 定义线
FillEliPse, //填充椭圆
TuoYuan, //定义空心圆
FillEllipse,
changFangXing , //长方形
Ellipse, //填充矩形
Rec, //填充空心矩形
Eraser, //橡皮擦
//椭圆
WuJiaoXing //五星红旗
5
Java实训课程设计报告
};
enum PenColor
{
ff = FontStyle.Bold,
fs = FontStyle.Italic,
ss = FontStyle.Regular,
fy = FontStyle.Strikeout,
fl = FontStyle.Underline
};
string strin; //定义一个URl变量
public drawinboard()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
g = this.pictureBox1.CreateGraphics(); //创建绘图面板 ChoiceGraph = (int)myselected.pencil;//默认选择为铅笔
penWideth = 2; //初时的大小为1
} private void button1_Click(object sender, EventArgs e)
{
ChoiceGraph = Convert.ToInt32(((Button)sender).Tag);
}
private void button8_Click(object sender, EventArgs e)
{
ChoiceGraph = Convert.ToInt32(((Button)sender).Tag);
}
private void button6_Click(object sender, EventArgs e)
{
ChoiceGraph = Convert.ToInt32(((Button)sender).Tag);
}
private void button7_Click(object sender, EventArgs e)
{
ChoiceGraph = Convert.ToInt32(((Button)sender).Tag);
}
private void button5_Click(object sender, EventArgs e)
{
Bitmap newpic = new Bitmap(pictureBox1.Width, pictureBox1.Height);
6
Java实训课程设计报告
Graphics g = Graphics.FromImage(newpic);
g.FillRectangle(new
pictureBox1.Height);
g.Dispose();
g = pictureBox1.CreateGraphics();
g.DrawImage(newpic, 0, 0);
g.Dispose();
}
private void button4_Click(object sender, EventArgs e) {
ChoiceGraph = Convert.ToInt32(((Button)sender).Tag); }
private void button3_Click(object sender, EventArgs e) {
ChoiceGraph = Convert.ToInt32(((Button)sender).Tag); }
private void button14_Click(object sender, EventArgs e) {
button14.BackColor = Color.White;
button13.BackColor = Color.White;
button12.BackColor = Color.White;
button11.BackColor = Color.White;
button10.BackColor = Color.White;
((Button)sender).BackColor = Color.Black;
penWideth = Convert.ToInt32(((Button)sender).Tag); }
private void button13_Click(object sender, EventArgs e) {
button14.BackColor = Color.White;
button13.BackColor = Color.White;
button12.BackColor = Color.White;
button11.BackColor = Color.White;
button10.BackColor = Color.White;
((Button)sender).BackColor = Color.Black;
penWideth = Convert.ToInt32(((Button)sender).Tag); }
private void button12_Click(object sender, EventArgs e) {
button14.BackColor = Color.White;
button13.BackColor = Color.White;
7 SolidBrush(Color.White), 0, 0, pictureBox1.Width,
Java实训课程设计报告
button12.BackColor = Color.White;
button11.BackColor = Color.White;
button10.BackColor = Color.White;
((Button)sender).BackColor = Color.Black;
penWideth = Convert.ToInt32(((Button)sender).Tag);
}
private void button11_Click(object sender, EventArgs e)
{
button14.BackColor = Color.White;
button13.BackColor = Color.White;
button12.BackColor = Color.White;
button11.BackColor = Color.White;
button10.BackColor = Color.White;
((Button)sender).BackColor = Color.Black;
penWideth = Convert.ToInt32(((Button)sender).Tag);
}
private void button10_Click(object sender, EventArgs e)
{ button14.BackColor = Color.White;
button13.BackColor = Color.White;
button12.BackColor = Color.White;
button11.BackColor = Color.White;
button10.BackColor = Color.White;
((Button)sender).BackColor = Color.Black;//选中的按钮背景色为黑色
penWideth = Convert.ToInt32(((Button)sender).Tag);//将宽度按钮的TAG值设置为画笔宽度
}
private void button21_Click(object sender, EventArgs e)
{
ColorDialog colorDialog1 = new ColorDialog();
if (((Button)sender).Text == "C")
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
button21.BackColor = colorDialog1.Color;
}
else
{
button21.BackColor = ((Button)sender).BackColor;
}
}
8
Java实训课程设计报告
}
private void CHange_point()
{
Point pTemp = new Point();
if (pStart.Y < PEnd.X)
{
if (pStart.Y > pTemp.Y) {
pTemp.Y = pStart.Y;
pStart.Y = PEnd.Y;
PEnd.Y = pTemp.Y;
}
}
if (pStart.X > PEnd.Y)
{ pTemp.X = pStart.X; pStart.X = PEnd.X;
PEnd.X = pTemp.X;
}
if (pStart.Y > pTemp.Y)
{ pTemp = pStart;
pStart = PEnd;
PEnd = pTemp;
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left)
{
pStart.X = e.X;
pStart.Y = e.Y;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) {
9
Java实训课程设计报告
ToolStripStatusLabel tspl = new ToolStripStatusLabel();
tspl.Text = ":" + e.X.ToString() + ",Y:" + e.Y.ToString();
if (e.Button == MouseButtons.Left)
{
switch (ChoiceGraph)
{
case (int)myselected.pencil://选择画笔
Pen pen1 = new Pen(btnBlack.BackColor, penWideth);
PEnd.X = e.X;
PEnd.Y = e.Y;
g.DrawLine(pen1, pStart, PEnd);
g.CompositingQuality = CompositingQuality.HighSpeed;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
pStart = PEnd;//将已经绘制的终点作为下一次绘制的起点
break; case (int)myselected.Eraser:
Pen pen2 = new Pen(Color.White, penWideth);//画笔定义白色画笔作为擦除的效果
PEnd.X = e.X;
PEnd.Y = e.Y;
g.DrawLine(pen2, pStart, PEnd);
pStart = PEnd;//将已经绘制的终点作为下次绘制的起点
break;
case (int)myselected.Ellipse:
Pen pen4 = new Pen(button21.BackColor, penWideth);
g.DrawEllipse(pen4, pStart.X, PEnd.Y, PEnd.X - pStart.X, PEnd.Y - PEnd.Y); break;
default:
break;
}
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
PEnd.X = e.X;
10
Java实训课程设计报告
PEnd.Y = e.Y;
switch (ChoiceGraph)
{
case (int)myselected.Line:
Pen pen1 = new Pen(button21.BackColor, penWideth);
g.DrawLine(pen1, pStart, PEnd);
break;
case (int)myselected.Ellipse:
CHange_point();
Pen pen2 = new Pen(button21.BackColor, penWideth);
g.DrawEllipse(pen2, pStart.X, PEnd.Y, PEnd.X - pStart.X, PEnd.Y - PEnd.Y); break;
case (int)myselected.FillEliPse:
CHange_point();
SolidBrush myBrush = new SolidBrush(button21.BackColor);
Rectangle rec = new Rectangle(pStart.X, pStart.Y, PEnd.X - pStart.X, PEnd.Y - pStart.Y);
g.FillEllipse(myBrush, rec);
break;
case (int)myselected.TuoYuan:
CHange_point();
Pen pen3 = new Pen(button21.BackColor, penWideth);
Point[] p1 = new Point[]
{
new Point(10,10),
new Point(60,40),
new Point(100,80),
new Point(60,100)
};
g.DrawPolygon(pen3, p1);
break;
case (int)myselected.changFangXing:
Pen pen5 = new Pen(button21.BackColor, penWideth);
g.DrawRectangle(pen5, 160, 234, 67, 89);
break;
default:
break;
}
}
}
private void button2_Click(object sender, EventArgs e)
11
Java实训课程设计报告
{
pictureBox1.Refresh();//刷新
}
private void button9_Click(object sender, EventArgs e) {
this.Close();//关闭
}
List<StringFormat> stringformat = new List<StringFormat>(); private void tspSize_Click(object sender, EventArgs e) {
ColorDialog fdFont = new ColorDialog();
if (fdFont.ShowDialog() == DialogResult.OK)
{
Graphics g = this.pictureBox1.CreateGraphics(); Pen p = new Pen(fdFont.Color, 1);
TextBox text = new TextBox();
string str = text.Text;
text.Focus();
StringFormat fw = new StringFormat();
pictureBox1.BackColor = fdFont.Color;
UserControl su = new UserControl();
su.Show();
}
}
private void btnRed_Click(object sender, EventArgs e) {
btnBlack.BackColor = Color.Red;
}
private void btnGrpwonly_Click(object sender, EventArgs e) {
btnBlack.BackColor = Color.GreenYellow;
}
private void button23_Click(object sender, EventArgs e) {
btnBlack.BackColor = Color.Blue;
}
private void btnYellow_Click(object sender, EventArgs e) {
btnBlack.BackColor = Color.Yellow;
}
private void btnWhite_Click(object sender, EventArgs e) {
btnBlack.BackColor = Color.White;
12
Java实训课程设计报告
}
private void btnGray_Click(object sender, EventArgs e)
{
btnBlack.BackColor = Color.Gray;
}
private void 红色RToolStripMenuItem_Click(object sender, EventArgs e)
{
Graphics g = pictureBox1.CreateGraphics();//创建图片面板
Bitmap bp = new Bitmap(pictureBox1.Image);
g.FillRectangle(Brushes.White, this.ClientRectangle);
Point[] destpoint = { new Point(0,0),
new Point (100,100),
new Point (0,100)
};
g.DrawImage(bp, destpoint);
}
private void 蓝色BToolStripMenuItem_Click(object sender, EventArgs e)
{
Graphics g = pictureBox1.CreateGraphics();
Bitmap bmp = new Bitmap(pictureBox1.Image);//加载图像
g.FillRectangle(Brushes.White, this.ClientRectangle);//填充窗体背景为白色 Point[] destinationPoints = {
new Point(100, 0), // destination for upper-left point of original
new Point(100, 100),// destination for upper-right point of original
new Point(0, 0)}; // destination for lower-left point of original
g.DrawImage(bmp, destinationPoints);
}
private void 黑色BToolStripMenuItem_Click(object sender, EventArgs e)
{
Graphics g = pictureBox1.CreateGraphics();
Bitmap bmp = new Bitmap(pictureBox1.Image);//加载图像
g.FillRectangle(Brushes.White, this.ClientRectangle);//填充窗体背景为白色 Point[] destinationPoints = {
new Point(0, 100), // destination for upper-left point of original
new Point(100, 100),// destination for upper-right point of original
new Point(0, 0)}; // destination for lower-left point of original
g.DrawImage(bmp, destinationPoints);
}
string srr;
13
Java实训课程设计报告
private void 打开OToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofen = new OpenFileDialog();
ofen.Filter = "(*.jpg)|*.jpg|(*.bump)|*.bump|(*.gif)|*.gif";
if (
ofen.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(ofen.FileName);
}
}
Rectangle myrect1; SolidBrush mysbrush1; SolidBrush mysbrush2; SolidBrush mysbrush3; SolidBrush mysbrush4;
private void 书法笔刷ToolStripMenuItem_Click(object sender, EventArgs e)
{
myrect1 = new Rectangle(20, 80, 250, 100);
mysbrush1 = new SolidBrush(Color.DarkOrchid);
mysbrush2 = new SolidBrush(Color.Aquamarine);
mysbrush3 = new SolidBrush(Color.DarkOrange);
mysbrush4 = new SolidBrush(Color.DarkRed);
g.FillRectangle(mysbrush1, myrect1); // (实心刷)
}
private void 梯度刷ToolStripMenuItem_Click(object sender, EventArgs e)
{
LinearGradientBrush mylbrush5 = new LinearGradientBrush(myrect1,
Color.DarkOrange, Color.Aquamarine,
LinearGradientMode.BackwardDiagonal);
g.FillRectangle(mysbrush2, myrect1); //(梯度刷 //(梯度刷) }
private void 阴影刷ToolStripMenuItem_Click(object sender, EventArgs e)
{
HatchBrush myhbrush5 = new HatchBrush(HatchStyle.DiagonalCross,
Color.DarkOrange, Color.Aquamarine);
HatchBrush myhbrush2 = new HatchBrush(HatchStyle.DarkVertical,
Color.DarkOrange, Color.Aquamarine);
HatchBrush myhbrush3 = new HatchBrush(HatchStyle.LargeConfetti,
Color.DarkOrange, Color.Aquamarine);
g.FillRectangle(mysbrush3, myrect1); //(阴影刷)
}
private void 纹理刷ToolStripMenuItem_Click(object sender, EventArgs e)
{
TextureBrush textureBrush = new TextureBrush(new Bitmap("C:\\Lighthouse.jpg")); g.FillRectangle(mysbrush4, myrect1); //(纹理刷)
}
private string textFileName = "";
14
Java实训课程设计报告
private string filePath = "";
private void 保存SToolStripMenuItem_Click(object sender, EventArgs e) {
Save();
}
private void Save() {
if (!textFileName.Equals(""))
{
SaveFileDialog saveFile = new SaveFileDialog();
// 默认保存格式
saveFile.Filter = "文本文件(*.txt)|*.txt";
StreamWriter sw = new StreamWriter(filePath, false);
sw.Close();
MessageBox.Show("文件保存成功!", "Mickey温馨提示"); filePath = saveFile.FileName;
// 把标题改为打开的文件的名称
Text = textFileName;
}
else
{
// 成员变量为“”,说明文件第一次保存,执行“另存为”操作 HoldFile();
}
}
private void HoldFile()
{
// 若用户选择另保存文件
SaveFileDialog saveFile = new SaveFileDialog();
// 默认保存格式
saveFile.Filter = "文本文件(*.txt)|*.txt";
if (saveFile.ShowDialog() == DialogResult.OK)
{
StreamWriter sw = new StreamWriter(saveFile.FileName, false);
sw.Close();
MessageBox.Show("文件保存成功!");
filePath = saveFile.FileName;
}
// 判断是第一次保存还是第二次
if (textFileName.Equals(""))
15
Java实训课程设计报告
{
FileInfo fileInfo = new FileInfo(saveFile.FileName);
Text = fileInfo.Name;
textFileName = fileInfo.Name;
}
else
{
// 把标题改为打开的文件的名称
Text = textFileName;
}
}
private void 另存为OToolStripMenuItem_Click(object sender, EventArgs e) {
HoldFile();
}
private void 打印预览LToolStripMenuItem_Click(object sender, EventArgs e) {
OpenFileDialog open = new OpenFileDialog();
strin = open.FileName;
open.Filter
wmf"; //设置打开图像的类型
if (open.ShowDialog() == DialogResult.OK)
{
open.InitialDirectory = strin;
open.RestoreDirectory = true;
pictureBox1.Image = Image.FromFile(open.FileName);
}
}
private void 页面设置YToolStripMenuItem_Click(object sender, EventArgs e) {
PrintDialog pg = new PrintDialog();
pg.AllowPrintToFile = true;
pg.AllowSomePages = true;
pg.ShowHelp = true;
pg.ShowDialog();
}
private void 打印ToolStripMenuItem_Click(object sender, EventArgs e) {
printPreviewDialog2.Document = this.printDocument2;
printPreviewDialog2.ShowDialog(); //打印预览对话框 }
16 = "*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.
Java实训课程设计报告
private void printDocument2_PrintPage(object sender, PrintPageEventArgs e)
{
try
{
e.Graphics.DrawImage(pictureBox1.Image, 100, 200, 300, 600);
}
catch (Exception ex)
{ throw ex; }
}
private void 放大BToolStripMenuItem_Click(object sender, EventArgs e)
{
if (pictureBox1.Width < 610)
{
pictureBox1.Width = Convert.ToInt32(pictureBox1.Width * 1.0);
pictureBox1.Height = Convert.ToInt32(pictureBox1.Height * 1.0);
}
else
{
MessageBox.Show(this, "图像已是最大,不能再放大了!", "提示对话框", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void tspColor_Click(object sender, EventArgs e)
{
ColorDialog color = new ColorDialog();
if (color.ShowDialog() == DialogResult.OK)
{
color.AnyColor = true;
color.AllowFullOpen = true;
color.FullOpen = true;
color.SolidColorOnly = false;
Graphics g = this.pictureBox1.CreateGraphics();
Pen p = new Pen(color.Color, 2);
//g.DrawLine(p, 120, 22, 34, 45);
//pictureBox1.BackColor = color.Color ;
btnBlack.BackColor = color.Color;
}
}
private void 缩小SToolStripMenuItem_Click(object sender, EventArgs e)
{
if (pictureBox1.Width >= 30)
{
pictureBox1.Width = Convert.ToInt32(pictureBox1.Width * 0.8);//图片的宽度缩小0.8
17
Java实训课程设计报告
pictureBox1.Height = Convert.ToInt32(pictureBox1.Height * 0.8);//图片的高度缩小0.8
}
else
{
MessageBox.Show(this, "图像已是最小,不能再缩小了!", "提示对话框", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void 还原ToolStripMenuItem_Click(object sender, EventArgs e) {
Graphics g = pictureBox1.CreateGraphics();
Bitmap bmp = new Bitmap(pictureBox1.Image);//加载图像
g.FillRectangle(Brushes.White, this.ClientRectangle);//填充窗体背景为白色 //Point[] destinationPoints = {
// new Point(0, 100), // destination for upper-left point of original
// new Point(100, 100),// destination for upper-right point of original
// new Point(0, 0)}; // destination for lower-left point of original
//g.DrawImage(bmp, destinationPoints);
g.DrawImage(bmp, 150, 400, 150, 150);
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
}
}
18