欢迎来到淘宝助理(手)官方网站

【编辑器代码】图像编辑器代码_编辑器代码

2016-10-22

河北联合大学

2011-2012第2学期

《软件设计基础-C#》

课程设计报告

设计名称: 图像编辑器 姓 名: 陈辉 学 号: 201114430119

专业班级: 11级地信(1) 班 学 院: 矿业工程学院 设计时间: 2012-05~2012-06 设计地点: 学校机房

《软件设计基础-C#》课程设计报告 第 2 页,共 36 页

目 录

1.课程设计目的 ············································································································

2.课程设计任务与要求 ·······························································································

3.课程设计说明书········································································································

4.课程设计成果 ············································································································

5.程序调试过程 ············································································································

6.设计问题的不足和改进方案 ···················································································

7.课程设计心得 ············································································································

8.附录 ····························································································································

9.参考文献 ····················································································································

《软件设计基础-C#》课程设计报告 第 3 页,共 36 页

《软件设计基础-C#》课程设计报告 第 4 页,共 36 页

《软件设计基础-C#》课程设计报告 ⑴功能描述



5

页,共

36



该软件为一个简单而且很实用的动态图片查看的工具,不但可以进行图片的一些简单查看,浏览操作,处理, 而且还可以进行幻灯片的自动播放等功能, 是一款比较适合广大普通用户和非计算机专业的用户的图片查看处理软 件,本软件不但界面友好,功能齐全,我们从用户角度,采用人性化设计,而且操作简单。是款比较容易操作,实 用的图片管理软件

概要设计
①模块结构图:

主窗体

输入模块

处理模块

输出模块


《软件设计基础-C#》课程设计报告



6

页,共

36





总体流程图:

启动程序

主窗口

输入模块

处理模块

输出模块

打 开 文 件 模 块

图 像 编 辑 主 页 面

图 片 位 置 调 准 模 块

图 片 外 形 调 整 模 块

图 片 显 示 方 式 模 块

幻 灯 片 放 映 效 果 模 块

保 存

③各功能模块流程图:


《软件设计基础-C#》课程设计报告



7

页,共

36



打开 打开文件模块 保存

退出

顺时针旋转 90 度 图片位置调准模块 逆时针旋转 90 度

逆时针旋转 180 度

顺时针旋转 180 度

底片 黑白

图片特效处理模块

锐化

柔化

浮雕

反色

积木

放大 图片模块 缩小

还原


《软件设计基础-C#》课程设计报告



8

页,共

36



⑷代码实现 详细说明各功能模块的实现过程,所用到的算法、技巧等(附上代码) 。 本系统总共有两个窗体

一、Frombianji-主窗体
作用: 引导使用整个软件 所用控件:1 个工具栏(MenuStripItem) ,17 个工具栏选项(MenuStripItem) , 分别为: ① 打开:打开、保存、退出、另存为。 ② 旋转:顺时针,逆时针旋转 90、180 度。 ③视图:放大、缩小、还原。 ④幻灯片播放: ⑤图片显示方式:居中、满图片框、自动大小。 1 个图片框(piturebox) , 8 个普通按钮: 柔化,锐化,黑白,底片,浮雕,积木,反色,撤销。

设计思路: 设置工具栏,放置各个工具栏选项,利用 Openfiledailoge,用 于打开文件,加载在 Picturebox 中,调整 picturebox 栏上属性, 以使图像能合理显示在 picturebox 中,再通过编写代码改变图像 的像素,来实现图像的特效效果,改变 picturebox 的 height 与 width 实现图像的缩放…… ⅰ.设计界面如图所示:


《软件设计基础-C#》课程设计报告



9

页,共

36



ⅱ.详细内容: 代码如下:
using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms; namespace WindowsFormsApplication5 { public partial class Formbianji : Form { public Formbianji() { InitializeComponent(); }

①打开相关文件
public void 文件ToolStripMenuItem_Click(object sender, EventArgs e) { this.openFileDialog1.ShowDialog();


《软件设计基础-C#》课程设计报告



10

页,共

36



string path = this.openFileDialog1.FileName; pictbox2.Image = Image.FromFile(path); } //定义一张图片为图片框中的图像

②图片特效效果
Bitmap oldBitmap = new Bitmap(100, 100); 1、底片特效图片
private void button2_Click(object sender, EventArgs e) { //以底片效果显示图像 oldBitmap = (Bitmap)this.pictbox2.Image; try { int Height = this.pictbox2.Image.Height; int Width = this.pictbox2.Image.Width; Bitmap newbitmap = new Bitmap(Width, Height); Color pixel; for (int x = 1; x < Width; x++) { for (int y = 1; y < Height; y++) { int r, g, b; pixel = oldBitmap.GetPixel(x, y); r = 255 - pixel.R; g = 255 - pixel.G; b = 255 - pixel.B; newbitmap.SetPixel(x, y, Color.FromArgb(r, g, b)); } } this.pictbox2.Image = newbitmap; } catch (Exception ex) { MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }


《软件设计基础-C#》课程设计报告



11

页,共

36



} 2、浮雕效果显示 private void button3_Click(object sender, EventArgs e) { //以浮雕效果显示图像 try { int Height = this.pictbox2.Image.Height; int Width = this.pictbox2.Image.Width; Bitmap newBitmap = new Bitmap(Width, Height); Bitmap oldBitmap = (Bitmap)this.pictbox2.Image; Color pixel1, pixel2; for (int x = 0; x < Width - 1; x++) { for (int y = 0; y < Height - 1; y++) { int r = 0, g = 0, b = 0; pixel1 = oldBitmap.GetPixel(x, y); pixel2 = oldBitmap.GetPixel(x + 1, y + 1); r = Math.Abs(pixel1.R - pixel2.R + 128); g = Math.Abs(pixel1.G - pixel2.G + 128); b = Math.Abs(pixel1.B - pixel2.B + 128); if (r > 255) r = 255; if (r < 0) r = 0; if (g > 255) g = 255; if (g < 0) g = 0; if (b > 255) b = 255; if (b < 0) b = 0; newBitmap.SetPixel(x, y, Color.FromArgb(r, g, b)); } } this.pictbox2.Image = newBitmap; } catch (Exception ex) { MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }


《软件设计基础-C#》课程设计报告
}



12

页,共

36



3、黑白特效
private void button4_Click(object sender, EventArgs e) { //以黑白效果显示图像 try { int Height = this.pictbox2.Image.Height; int Width = this.pictbox2.Image.Width; Bitmap newBitmap = new Bitmap(Width, Height); Bitmap oldBitmap = (Bitmap)this.pictbox2.Image; Color pixel; for (int x = 0; x < Width; x++) for (int y = 0; y < Height; y++) { pixel = oldBitmap.GetPixel(x, y); int r, g, b, Result = 0; r = pixel.R; g = pixel.G; b = pixel.B; //实例程序以加权平均值法产生黑白图像 int iType = 2; switch (iType) { case 0://平均值法 Result = ((r + g + b) / 3); break; case 1://最大值法 Result = r > g ? r : g; Result = Result > b ? Result : b; break; case 2://加权平均值法 Result = ((int)(0.7 * r) + (int)(0.2 * g) + (int)(0.1 * b)); break; } newBitmap.SetPixel(x, y, Color.FromArgb(Result, Result, Result)); } this.pictbox2.Image = newBitmap; } catch (Exception ex) { MessageBox.Show(ex.Message, "信息提示"); } }


《软件设计基础-C#》课程设计报告



13

页,共

36



4、柔化效果
private void button5_Click(object sender, EventArgs e) { //以柔化效果显示图像 try { int Height = this.pictbox2.Image.Height; int Width = this.pictbox2.Image.Width; Bitmap bitmap = new Bitmap(Width, Height); Bitmap MyBitmap = (Bitmap)this.pictbox2.Image; Color pixel; //高斯模板 int[] Gauss = { 1, 2, 1, 2, 4, 2, 1, 2, 1 }; for (int x = 1; x < Width - 1; x++) for (int y = 1; y < Height - 1; y++) { int r = 0, g = 0, b = 0; int Index = 0; for (int col = -1; col <= 1; col++) for (int row = -1; row <= 1; row++) { pixel = MyBitmap.GetPixel(x + row, y + col); r += pixel.R * Gauss[Index]; g += pixel.G * Gauss[Index]; b += pixel.B * Gauss[Index]; Index++; } r /= 16; g /= 16; b /= 16; //处理颜色值溢出 r = r > 255 ? 255 : r; r = r < 0 ? 0 : r; g = g > 255 ? 255 : g; g = g < 0 ? 0 : g; b = b > 255 ? 255 : b; b = b < 0 ? 0 : b; bitmap.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b)); } this.pictbox2.Image = bitmap; } catch (Exception ex) { MessageBox.Show(ex.Message, "信息提示");


《软件设计基础-C#》课程设计报告
}



14

页,共

36



}

5、锐化特效
private void button6_Click(object sender, EventArgs e) { //以锐化效果显示图像 try { int Height = this.pictbox2.Image.Height; int Width = this.pictbox2.Image.Width; Bitmap newBitmap = new Bitmap(Width, Height); Bitmap oldBitmap = (Bitmap)this.pictbox2.Image; Color pixel; //拉普拉斯模板 int[] Laplacian = { -1, -1, -1, -1, 9, -1, -1, -1, -1 }; for (int x = 1; x < Width - 1; x++) for (int y = 1; y < Height - 1; y++) { int r = 0, g = 0, b = 0; int Index = 0; for (int col = -1; col <= 1; col++) for (int row = -1; row <= 1; row++) { pixel = oldBitmap.GetPixel(x + row, y + col); r += pixel.R * Laplacian[Index]; g += pixel.G * Laplacian[Index]; b += pixel.B * Laplacian[Index]; Index++; } //处理颜色值溢出 r = r > 255 ? 255 : r; r = r < 0 ? 0 : r; g = g > 255 ? 255 : g; g = g < 0 ? 0 : g; b = b > 255 ? 255 : b; b = b < 0 ? 0 : b; newBitmap.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b)); } this.pictbox2.Image = newBitmap; } catch (Exception ex) {


《软件设计基础-C#》课程设计报告
MessageBox.Show(ex.Message, "信息提示"); } }



15

页,共

36



6、积木特效
private void button7_Click(object sender, EventArgs e) { int Pheight = this.pictbox2.Image.Height; int pwidth = this.pictbox2.Image.Width; Rectangle rect = new Rectangle(0, 0, pwidth, Pheight);

Bitmap curbmp = new Bitmap(this.pictbox2.Image); Bitmap mybmp = curbmp.Clone(rect, System.Drawing.Imaging.PixelFormat.Format24bppRgb); if (mybmp == null) { return; } System.Drawing.Imaging.BitmapData bmpdata = mybmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb); IntPtr ptr = bmpdata.Scan0; int bytes = pwidth * Pheight * 3; byte[] rgbValues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);//将非托管内存指针 赋给数组 byte temp = 0; for (int i = 0; i < bytes - 3; i += 3) { temp = (byte)((rgbValues[i] + rgbValues[i + 1] + rgbValues[i + 2]) / 3); if (temp >= 128) { temp = 255; } else { temp = 0; } rgbValues[i] = rgbValues[i + 1] = rgbValues[i + 2] = temp;


《软件设计基础-C#》课程设计报告



16

页,共

36



} System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes); mybmp.UnlockBits(bmpdata); this.pictbox2.Image = mybmp; } ③幻灯片播放按钮 public void 幻灯片播放ToolStripMenuItem_Click(object sender, EventArgs e) { Formppt frm1 = new Formppt(); frm1.MdiParent = this; frm1.Show(); pictbox2.Visible = false; button2.Visible = false; button3.Visible = false; button4.Visible = false; button5.Visible = false; button6.Visible = false; button7.Visible = false; button8.Visible = false; button9.Visible = false; 幻灯片播放ToolStripMenuItem.Enabled = false; 视图ToolStripMenuItem.Enabled = false; 旋转ToolStripMenuItem.Enabled = false; 旋转ToolStripMenuItem.Enabled = false; }

④视图编辑
private void 缩小ToolStripMenuItem_Click(object sender, EventArgs e) { int h, w; h = pictbox2.Height; w = pictbox2.Width; h = h / 2; w = w / 2; pictbox2.Height = h; pictbox2.Width = w; } private void 放大ToolStripMenuItem_Click(object sender, EventArgs e) {


《软件设计基础-C#》课程设计报告
int w, h; w = pictbox2.Width; h = pictbox2.Height; h = h * 2; w = w * 2; pictbox2.Height = h; pictbox2.Width = w; }



17

页,共

36



public void 还原ToolStripMenuItem_Click(object sender, EventArgs e) { } private void 顺时针90ToolStripMenuItem_Click(object sender, EventArgs e) { this.pictbox2.Image.RotateFlip(RotateFlipType.Rotate90FlipXY); this.pictbox2.Refresh();

} private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) {

}

⑤输出阶段
public void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); //实例化一个文件夹对话 框 if (fbd.ShowDialog() == DialogResult.OK) { pictbox2.Image.Save("pNew.jpg"); //将载入的图片保存到指定流 System.IO.FileStream fs_r = new System.IO.FileStream("pNew.jpg", System.IO.FileMode.Open, System.IO.FileAccess.Read); //二进制流读图片 System.IO.BinaryReader br = new System.IO.BinaryReader(fs_r); byte[] byteBuffer = br.ReadBytes((int)fs_r.Length); //二进制流写图片到指定的文件夹中 System.IO.FileStream fs_w = new System.IO.FileStream(fbd.SelectedPath + @"\pNew.jpg", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write, System.IO.FileShare.None); System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs_w);


《软件设计基础-C#》课程设计报告
bw.Write(byteBuffer); br.Close(); bw.Close(); fs_w.Close(); fs_r.Close(); }



18

页,共

36



MessageBox.Show("图片保存到" + fbd.SelectedPath + @"\pNew.jpg"); } private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); }

⑥图片显示方式
private void 居中ToolStripMenuItem_Click(object sender, EventArgs e) { this.pictbox2.SizeMode = PictureBoxSizeMode.CenterImage; } private void 满图片框ToolStripMenuItem_Click(object sender, EventArgs e) { this.pictbox2.SizeMode = PictureBoxSizeMode.StretchImage; } private void 自动大小ToolStripMenuItem_Click(object sender, EventArgs e) { this.pictbox2.SizeMode = PictureBoxSizeMode.AutoSize; } 相关流程图

二、Fromppt-副窗体
作用: 用语幻灯片放映 ⅰ所用控件:1 个工具栏(MenuStripItem) 个工具栏选项(MenuStripItem) ,1 ,
打开图像文件夹;

1 个图片框(Piturebox) , 5 个普通按钮:


《软件设计基础-C#》课程设计报告
上一张,下一张,播放,暂停



19

页,共

36



1 个计时器,1 个 StatuStrip,一个 toolstripbuttton(打开文件夹) ; ⅱ设计思路

将所要用于放映的图像加载在 ListBox 中,然后再在 picturebox 中显示,再利用 timer 计时器设置时间间隔显示图像……

ⅲ设计界面

代码如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;


《软件设计基础-C#》课程设计报告



20

页,共

36



using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO;

namespace WindowsFormsApplication5 { public partial class Formppt : Form { public Formppt() { InitializeComponent();

}

public string Ppath = ""; private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Formbianji frm2 = new Formbianji(); frm2.Show();//定义一新窗体form编辑 }


《软件设计基础-C#》课程设计报告



21

页,共

36



①播放 private void butbo_Click(object sender, EventArgs e) {

buttonstop.Text = "暂停"; butbo.Text = ""; butshang.Enabled = false; butxia.Enabled = false; timer1.Enabled = true;//播放按钮事件,触发计时器 }

private void Form1_Load(object sender, EventArgs e) { buttonstop.Text = ""; butshang.Enabled = true;//form1的load事件 butxia.Enabled = true; } ②暂停 private void button2_Click(object sender, EventArgs e) { butbo.Text = "播放"; buttonstop.Text = ""; butxia.Enabled = true;


《软件设计基础-C#》课程设计报告



22

页,共

36



butshang.Enabled = true; timer1.Stop();

}

③加载图像文件群 private void btnOpen_Click(object sender, EventArgs e) { FolderBrowserDialog mydlg = new FolderBrowserDialog(); if (mydlg.ShowDialog() == DialogResult.OK) { this.listBox1.Items.Clear(); Ppath = mydlg.SelectedPath;

string[] files = Directory.GetFiles(Ppath); foreach (string pfilename in files) {

string extension = Path.GetExtension(pfilename).ToLower();//得到文件扩展名


《软件设计基础-C#》课程设计报告



23

页,共

36



if (extension == ".jpeg" || extension == ".jpg" || extension == ".gif" || extension == ".bmp" || extension == ".png") { string temp = pfilename;

int start = pfilename.LastIndexOf("\\") + 1;

temp = pfilename.Substring(start, pfilename.Length - start);//得到文件名

this.listBox1.Items.Add(temp);

} } } } ④上一页
private void butshang_Click(object sender, EventArgs e) {


《软件设计基础-C#》课程设计报告



24

页,共

36



int index = this.listBox1.SelectedIndex; if (index == this.listBox1.Items.Count - 1) { return;

} if (index > 0) { butxia.Enabled = true; butshang.Enabled = true; } this.listBox1.SelectedIndex-=1; string path = Ppath; path +="\\"+ this.listBox1.SelectedItem.ToString(); this.pictbox1.Image = Image.FromFile(path); } ⑤下一页 private void butxia_Click(object sender, EventArgs e) { string path = Ppath; int index = this.listBox1.SelectedIndex; if (index == this.listBox1.Items.Count + 1)


《软件设计基础-C#》课程设计报告



25

页,共

36



{ this.listBox1 .SelectedIndex =0;

path += "\\" + this.listBox1.SelectedItem.ToString();

this.pictbox1.Image = Image.FromFile(path);

}

this.listBox1.SelectedIndex += 1;

path += "\\" + this.listBox1.SelectedItem.ToString();

this.pictbox1.Image = Image.FromFile(path); } ⑥计时器事件 private void timer1_Tick(object sender, EventArgs e) {

this.listBox1.SelectedIndex +=

1;

//if (this.listBox1 .SelectedIndex ==)


《软件设计基础-C#》课程设计报告



26

页,共

36



string path = Ppath; path += "\\" + this.listBox1.SelectedItem.ToString();

this.pictbox1.Image = Image.FromFile(path); } } }


《软件设计基础-C#》课程设计报告 第 27 页,共 36 页

《软件设计基础-C#》课程设计报告



28

页,共

36



特效处理

黑白效果


《软件设计基础-C#》课程设计报告



29

页,共

36



积木特效


《软件设计基础-C#》课程设计报告



30

页,共

36



底片模式

浮雕特效


《软件设计基础-C#》课程设计报告 5.程序调试过程



31

页,共

36



写出程序调试步骤,及遇到的问题。

主窗体调试步骤
打开主窗 体 黑白特效 打开 浮雕特效 图像位置调整 柔化处理

锐化处理 积木特效 底片特效

退出


《软件设计基础-C#》课程设计报告



32

页,共

36



副窗体调试步骤

主界面

幻灯片放映

Toolstripbuttonopen

否 加载图像



上一张

暂停

播放

下一张

退出


《软件设计基础-C#》课程设计报告 第 33 页,共 36 页

《软件设计基础-C#》课程设计报告



34

页,共

36



7.课程设计心得

通过这次与队友合作成功的 c#程序我收获颇多。 首先,通过完成本次面向对象程序设计的任务,使我熟练和掌握了上学 期所学的有关 visual c#中的一些主要知识点和应用点,如类的定义,类的实 现,对象的定义,类的继承等等。可以所学有所学,所有所用,不至于自己 所学知识由于没有经历可用过程,而放弃对它的兴趣。 其次,做了两周的课程设计,有很多的心得体会,更多的是同学之间的 合作精神, 这道课程设计花了我们一到两周的时间,几人合作,老师的帮 忙才完成。我第一次完成这么完美的杰作,心理有一份别样的滋味,在设计 过程中,我付出了很多,也懂得了只有付出才有回报。在这次设计中,我遇 到了很多困难,但我没有向困难低头,通过查询资料,虚心向同学、老师请 教,才一一得到了解决。我发现平时学的太少了,在今后我首先要把老师在 课堂讲的弄懂, 弄透, 在此基础上利用课余时间多看课外书籍, 拓宽知识面。 在设计过程中,合作精神必不可少。单凭一个人的力量是不能完成的,毕竟 一个人学的很有限。每个人掌握的不同。我相信:态度决定一切,只有努力 才有收获。 更重要的是, 另外当我们在编程序时深深感受到一定要细心在细心, 有时少一个“;”或“<”都会导致程序语法错误;由于编程序经常要变换输入 法,很容易输进中文字符,这也会导致语法错误;调用类里重名函数时要注 明属于哪个类的。 平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面 对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难 点,更别说让你自己去设计。为了解决此类问题,最好就是多向同学,老师 请教,不要怕难为情。 这不仅是一次对我们的 c#掌握和运用的熟练程度的检查,更是一次磨 练我们耐性、培养认真态度的机会。让我深刻体会到“细节决定成败,态度 决定一切”。相信这会在我今后的学习和以后的工作很有帮助。 通过这次实践我明白:人是在与他人交往中认识世界,在交流中不断调 整和修正自己的错误,从而使之更全面,更透彻。这套运算器的程序都由我 们自己互相帮助,经过无数次的修改而成,老师只是辅导。我们知道老师不 再是全知全能的权威,不再是知识的来源,他们只是学生的协作和促进者, 只有我们才是学习的主人……


《软件设计基础-C#》课程设计报告



35

页,共

36



8.附录 有些需要说明的部分。如添加 ActiveX 等非不标准部件,或使用文件操作时对路径有特殊要求 等。若没有特殊要求,此处为“无” 。

9.参考文献

网站:CSDN 和博客园 张龙卿,欧洋《C#.NET 应用精彩 50 例》 清华大学出版社 莫永腾《深入浅出设计模式(C#&JAVA 版) 》清华大学出版社 《Apress Illustrated C# 2008》
《C#高级编程》 (第六版)清华大学出版社

《写给大家的 C 语言书》


《软件设计基础-C#》课程设计报告



36

页,共

36




淘宝助理为您找到【编辑器代码】图像编辑器代码_编辑器代码的详细资讯,实时报价,价格行情,商品分类,论坛问答/求购等信息。您还可以找【编辑器代码】图像编辑器代码_编辑器代码的相关内容信息。