基本信息
源码名称:C#图像处理效果(浮雕/黑白/柔化/锐化/油画/旋转等)
源码大小:0.09M
文件格式:.zip
开发语言:C#
更新时间:2020-04-17
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
通过PictureBox控件进行图像的处理。
通过PictureBox控件进行图像的处理。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using System.IO; using System.Diagnostics; namespace picture { public partial class Form1 : Form { byte save; public Form1() { InitializeComponent(); toolStripComboBox1.SelectedIndexChanged = toolStripComboBox1_SelectedIndexChanged; string[] values = Enum.GetNames(typeof(PictureBoxSizeMode)); toolStripComboBox1.Items.AddRange(values); toolStripComboBox1.SelectedIndex = 4; PictureBoxSizeMode si = (PictureBoxSizeMode)Enum.Parse(typeof(PictureBoxSizeMode), "Zoom"); pictureBox1.SizeMode = si; } Bitmap baocun; void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs a) { string val = toolStripComboBox1.SelectedItem as string; PictureBoxSizeMode si = (PictureBoxSizeMode)Enum.Parse(typeof(PictureBoxSizeMode), val); pictureBox1.SizeMode = si; } private void Form1_MouseDown(object sender, MouseEventArgs e) { } private void Form1_Paint(object sender, PaintEventArgs e) { } int intWidth; int intHeight; Bitmap huanyuan,s; int aaa; private void 打开OToolStripMenuItem_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { try { aaa = aaa 1; Bitmap bmp = null; Image pic = null; if (Directory.Exists("Temp") != true) { Directory.CreateDirectory("Temp"); } File.Delete("Temp\\" aaa ".png"); File.Delete("Temp\\" aaa ".jpg"); File.Delete("Temp\\" aaa ".gif"); File.Delete("Temp\\" aaa ".bmp"); File.Delete("Temp\\" aaa ".jpeg"); if (openFileDialog1.FileName.Contains(".png") == true || openFileDialog1.FileName.Contains(".PNG") == true) { File.Copy(openFileDialog1.FileName, "Temp\\" aaa ".png");//打开图片 bmp = new Bitmap("Temp\\" aaa ".png"); pic = Image.FromFile("Temp\\" aaa ".png"); s = new Bitmap("Temp\\" aaa ".png"); } if (openFileDialog1.FileName.Contains(".jpg") == true || openFileDialog1.FileName.Contains(".JPG") == true) { File.Copy(openFileDialog1.FileName, "Temp\\" aaa ".jpg" );//打开图片 bmp = new Bitmap("Temp\\" aaa ".jpg"); pic = Image.FromFile("Temp\\" aaa ".jpg"); s = new Bitmap("Temp\\" aaa ".jpg"); } if (openFileDialog1.FileName.Contains(".gif") == true || openFileDialog1.FileName.Contains(".GIF") == true) { File.Copy(openFileDialog1.FileName, "Temp\\" aaa ".gif");//打开图片 bmp = new Bitmap("Temp\\" aaa ".gif"); pic = Image.FromFile("Temp\\" aaa ".gif"); s = new Bitmap("Temp\\" aaa ".gif"); } if (openFileDialog1.FileName.Contains(".bmp") == true || openFileDialog1.FileName.Contains(".BMP") == true) { File.Copy(openFileDialog1.FileName, "Temp\\" aaa ".bmp");//打开图片 bmp = new Bitmap("Temp\\" aaa ".bmp"); pic = Image.FromFile("Temp\\" aaa ".bmp"); s = new Bitmap("Temp\\" aaa ".bmp"); } if (openFileDialog1.FileName.Contains(".jpeg") == true || openFileDialog1.FileName.Contains(".JPEG") == true) { File.Copy(openFileDialog1.FileName, "Temp\\" aaa ".jpeg");//打开图片 bmp = new Bitmap("Temp\\" aaa ".jpeg"); pic = Image.FromFile("Temp\\" aaa ".jpeg"); s = new Bitmap("Temp\\" aaa ".jpeg"); } pictureBox1.Image = bmp; intWidth = pic.Width; intHeight = pic.Height; 保存SToolStripMenuItem.Enabled = true; 另存为LToolStripMenuItem.Enabled = true; 底片ToolStripMenuItem.Enabled = true; 底片ToolStripMenuItem.Enabled = true; 浮雕ToolStripMenuItem.Enabled = true; 黑白ToolStripMenuItem.Enabled = true; 柔滑ToolStripMenuItem.Enabled = true; 锐化ToolStripMenuItem.Enabled = true; 油画ToolStripMenuItem.Enabled = true; toolStripComboBox1.Enabled = true; 旋转ToolStripMenuItem1.Enabled = true; 还原为最初照片ToolStripMenuItem.Enabled = true; 撤回上一步ToolStripMenuItem.Enabled = false; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = false; huanyuan = bmp; open = openFileDialog1.FileName; baocun = new Bitmap(pictureBox1.Image); save = 0; this.Text = "图片编辑器——" open; label1.Text = "已打开图片!"; bmp = null; openFileDialog1.Dispose(); } catch(Exception ex) { MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);//显示出错原因 label1.Text = "图片打开出错!"; } } } string open; private void 另存为LToolStripMenuItem_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { System.IO.FileStream picture = null; try { Bitmap bmp = new Bitmap(pictureBox1.Image); s = new Bitmap(pictureBox1.Image); bmp.Save(saveFileDialog1.FileName); MessageBox.Show("保存成功"); label1.Text = "保存成功!"; this.Text = "图片编辑器——" open; baocun = new Bitmap(pictureBox1.Image); save = 0; save = 0; this.Text = "图片编辑器——" open; } catch (Exception ex) { MessageBox.Show(ex.Message); label1.Text = "保存失败!"; } finally { if (picture != null) { picture.Close(); picture.Dispose(); } } } } private void 退出EToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult aaa = MessageBox.Show("你确定要退出吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk); if(aaa == DialogResult.Yes) { if(save == 1) { aaa = MessageBox.Show("你确定要退出吗?\n你的照片并未保存,你确定吗?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if(aaa == DialogResult.OK) { this.Close(); } } else this.Close(); } } private void 底片ToolStripMenuItem_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); try { Bitmap newbitmap = new Bitmap(intWidth, intHeight); Bitmap oldbitmap = (Bitmap)this.pictureBox1.Image; Color pixel; for (int x = 1; x < intWidth; x ) { for(int y = 1;y < intHeight;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.pictureBox1.Image = newbitmap; label1.Text = "已完成图片操作:“底片”!"; 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void toolStripComboBox1_Click(object sender, EventArgs e) { } private void 浮雕ToolStripMenuItem_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); try { Bitmap newBitmap = new Bitmap(intWidth, intHeight); Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image; Color pixel1, pixel2; for(int x = 0;x < intWidth - 1;x ) { for(int y = 0;y < intHeight - 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.pictureBox1.Image = newBitmap; label1.Text = "已完成图片操作:“浮雕”!"; 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void 黑白ToolStripMenuItem_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); try { Bitmap newBitmap = new Bitmap(intWidth, intHeight); Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image; Color pixel; for(int x = 0;x < intWidth;x ) { for(int y = 0;y < intHeight;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.pictureBox1.Image = newBitmap; label1.Text = "已完成图片操作:“黑白”!"; 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void 柔滑ToolStripMenuItem_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); try { Bitmap bitmap = new Bitmap(intWidth, intHeight); Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image; Color pixel; int[] Gauss = { 1, 2, 1, 2, 4, 2, 1, 2, 1 }; for(int x = 1;x < intWidth - 1;x ) { for(int y = 1;y < intHeight - 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.pictureBox1.Image = bitmap; 撤回上一步ToolStripMenuItem.Enabled = true; label1.Text = "已完成图片操作:“柔滑”!"; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void 锐化ToolStripMenuItem_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); try { Bitmap newBitmap = new Bitmap(intWidth, intHeight); Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image; Color pixel; int[] Laplacian = { -1, -1, -1, -1, 9, -1, -1, -1, -1 }; for (int x = 1; x < intWidth - 1; x ) { for (int y = 1; y < intHeight - 1; y ) { int r = 0, g = 0, b = 0; int Index = 0; for (int col = -1; col <= 1; col ) { for (int rom = -1; rom <= 1; rom ) { pixel = oldBitmap.GetPixel(x rom, 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.pictureBox1.Image = newBitmap; 撤回上一步ToolStripMenuItem.Enabled = true; label1.Text = "已完成图片操作:“锐化”!"; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void 油画ToolStripMenuItem_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); try { Bitmap newBitmap = new Bitmap(intWidth, intHeight); Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image; Color pixel; Random rnd = new Random(); for(int x = intWidth;x > 1;x--) { for(int y = intHeight;y > 1;y--) { int iModel = 5; int i = x - iModel; if(i > 1) { int j = y - iModel; if(j > 1) { int iPos = rnd.Next(100000) % iModel; pixel = oldBitmap.GetPixel(i iPos, j iPos); newBitmap.SetPixel(i, j, pixel); } } } } this.pictureBox1.Image = newBitmap; 撤回上一步ToolStripMenuItem.Enabled = true; label1.Text = "已完成图片操作:“油画”!"; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void 保存SToolStripMenuItem_Click(object sender, EventArgs e) { System.IO.FileStream picture = null; try { Bitmap bmp = new Bitmap(pictureBox1.Image); s = new Bitmap(pictureBox1.Image); bmp.Save(open); MessageBox.Show("保存成功"); label1.Text = "保存成功!"; this.Text = "图片编辑器——" open; baocun = new Bitmap(pictureBox1.Image); save = 0; save = 0; this.Text = "图片编辑器——" open; } catch (Exception ex) { MessageBox.Show(ex.Message); label1.Text = "保存失败!"; } finally { if (picture != null) { picture.Close(); picture.Dispose(); } } } private void 旋转180ToolStripMenuItem_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); Image myImage = pictureBox1.Image; myImage.RotateFlip(RotateFlipType.Rotate180FlipNone); pictureBox1.Image = myImage; 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; label1.Text = "已旋转180°!"; } private void 顺时针旋转90ToolStripMenuItem1_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); Image myImage = pictureBox1.Image; myImage.RotateFlip(RotateFlipType.Rotate270FlipXY); pictureBox1.Image = myImage; 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; label1.Text = "已顺时针旋转90°!"; } private void 逆时针旋转90ToolStripMenuItem1_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); Image myImage = pictureBox1.Image; myImage.RotateFlip(RotateFlipType.Rotate90FlipXY); pictureBox1.Image = myImage; 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; label1.Text = "已逆时针旋转90°!"; } private void 垂直旋转ToolStripMenuItem1_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); Image myImage = pictureBox1.Image; myImage.RotateFlip(RotateFlipType.Rotate180FlipX); pictureBox1.Image = myImage; 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; label1.Text = "已垂直旋转!"; } private void 水平旋转ToolStripMenuItem1_Click(object sender, EventArgs e) { label1.Text = "正在完成图片操作,可能会出现程序未响应的情况。请稍等一段时间,如果等待时间过长,请重新启动程序!"; shangyibu = new Bitmap(pictureBox1.Image); Thread.Sleep(500); Image myImage = pictureBox1.Image; myImage.RotateFlip(RotateFlipType.Rotate180FlipY); pictureBox1.Image = myImage; 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; save = 1; this.Text = "*图片编辑器——" open; label1.Text = "已水平旋转!"; } private void 旋转ToolStripMenuItem1_Click(object sender, EventArgs e) { } private void 还原为最初照片ToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult aaa = MessageBox.Show("你确定要还原为未修改过的原照片吗?\n还原后可以点击“撤销”键还原(只能还原上一次操作)", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk); if(aaa == DialogResult.Yes) { pictureBox1.Image = huanyuan; 撤回上一步ToolStripMenuItem.Enabled = true; 还原为最初照片ToolStripMenuItem.Enabled = false; if(pictureBox1.Image!= s) { save = 1; this.Text = "*图片编辑器——" open; } else { save = 0; this.Text = "图片编辑器——" open; } } } Bitmap shangyibu,huanyuanshangyibu; private void 撤回上一步ToolStripMenuItem_Click(object sender, EventArgs e) { huanyuanshangyibu = new Bitmap(pictureBox1.Image); pictureBox1.Image = shangyibu; 撤回上一步ToolStripMenuItem.Enabled = false; 还原上一步操作ToolStripMenuItem.Enabled = true; 还原为最初照片ToolStripMenuItem.Enabled = true; if (pictureBox1.Image != s) { save = 1; this.Text = "*图片编辑器——" open; } else { save = 0; this.Text = "图片编辑器——" open; } } private void 还原上一步操作ToolStripMenuItem_Click(object sender, EventArgs e) { pictureBox1.Image = huanyuanshangyibu; shangyibu = new Bitmap(pictureBox1.Image); 撤回上一步ToolStripMenuItem.Enabled = true; 还原上一步操作ToolStripMenuItem.Enabled = false; 还原为最初照片ToolStripMenuItem.Enabled = true; if (pictureBox1.Image != s) { save = 1; this.Text = "*图片编辑器——" open; } else { save = 0; this.Text = "图片编辑器——" open; } } } }