您的位置:首页 > 编程语言 > C#

用C#实现的图象处理(源代码)------正在更新中!

2005-10-22 22:33 369 查看
//以下是form1.cs部分!
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing.Text;
namespace 李计刚的数字图象处理作业
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.MainMenu mainMenu1;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MenuItem menuItem2;
private System.Windows.Forms.MenuItem menuItem3;
private System.Windows.Forms.MenuItem menuItem4;
private System.Windows.Forms.MenuItem menuItem5;
private System.Windows.Forms.MenuItem menuItem6;
private System.Windows.Forms.MenuItem menuItem7;
private System.Windows.Forms.MenuItem menuItem8;
private System.Windows.Forms.MenuItem menuItem9;
private System.Windows.Forms.MenuItem menuItem10;
private System.Windows.Forms.MenuItem menuItem11;
private System.Windows.Forms.MenuItem menuItem12;
private System.Windows.Forms.MenuItem menuItem13;
private System.Windows.Forms.MenuItem menuItem14;
private System.Windows.Forms.MenuItem menuItem15;
private System.Windows.Forms.MenuItem menuItem16;
private System.Windows.Forms.MenuItem menuItem17;
private System.Windows.Forms.MenuItem menuItem18;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.SaveFileDialog saveFileDialog1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.MenuItem menuItem19;
private System.Drawing.Bitmap m_bitmap;
private System.Drawing.Bitmap m_copybitmap;//对当前打开文件的备份
private System.Windows.Forms.Label label1;
private System.Windows.Forms.MenuItem menuItem20;
private System.Windows.Forms.MenuItem menuItem21;
private System.Windows.Forms.MenuItem menuItem22;
private System.Windows.Forms.MenuItem menuItem23;//用于判断图象是否被修改过!
private int brightness;//获取亮度属性!
private System.Windows.Forms.MenuItem menuItem24;
private System.Windows.Forms.MenuItem menuItem25;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.menuItem16 = new System.Windows.Forms.MenuItem();
this.menuItem17 = new System.Windows.Forms.MenuItem();
this.menuItem25 = new System.Windows.Forms.MenuItem();
this.menuItem18 = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.menuItem6 = new System.Windows.Forms.MenuItem();
this.menuItem7 = new System.Windows.Forms.MenuItem();
this.menuItem8 = new System.Windows.Forms.MenuItem();
this.menuItem20 = new System.Windows.Forms.MenuItem();
this.menuItem21 = new System.Windows.Forms.MenuItem();
this.menuItem22 = new System.Windows.Forms.MenuItem();
this.menuItem23 = new System.Windows.Forms.MenuItem();
this.menuItem24 = new System.Windows.Forms.MenuItem();
this.menuItem3 = new System.Windows.Forms.MenuItem();
this.menuItem9 = new System.Windows.Forms.MenuItem();
this.menuItem10 = new System.Windows.Forms.MenuItem();
this.menuItem11 = new System.Windows.Forms.MenuItem();
this.menuItem12 = new System.Windows.Forms.MenuItem();
this.menuItem13 = new System.Windows.Forms.MenuItem();
this.menuItem14 = new System.Windows.Forms.MenuItem();
this.menuItem4 = new System.Windows.Forms.MenuItem();
this.menuItem15 = new System.Windows.Forms.MenuItem();
this.menuItem5 = new System.Windows.Forms.MenuItem();
this.menuItem19 = new System.Windows.Forms.MenuItem();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// mainMenu1
//
this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1,
this.menuItem2,
this.menuItem3,
this.menuItem4,
this.menuItem5});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem16,
this.menuItem17,
this.menuItem25,
this.menuItem18});
this.menuItem1.Text = "文件";
//
// menuItem16
//
this.menuItem16.Index = 0;
this.menuItem16.Text = "打开";
this.menuItem16.Click += new System.EventHandler(this.menuItem16_Click);
//
// menuItem17
//
this.menuItem17.Index = 1;
this.menuItem17.Text = "保存";
this.menuItem17.Visible = false;
this.menuItem17.Click += new System.EventHandler(this.menuItem17_Click);
//
// menuItem25
//
this.menuItem25.Index = 2;
this.menuItem25.Text = "重新载入";
this.menuItem25.Visible = false;
this.menuItem25.Click += new System.EventHandler(this.menuItem25_Click);
//
// menuItem18
//
this.menuItem18.Index = 3;
this.menuItem18.Text = "退出";
this.menuItem18.Click += new System.EventHandler(this.menuItem18_Click);
//
// menuItem2
//
this.menuItem2.Index = 1;
this.menuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem6,
this.menuItem7,
this.menuItem8,
this.menuItem20,
this.menuItem21,
this.menuItem22,
this.menuItem23,
this.menuItem24});
this.menuItem2.Text = "点运算";
this.menuItem2.Visible = false;
//
// menuItem6
//
this.menuItem6.Index = 0;
this.menuItem6.Text = "逆反处理";
this.menuItem6.Click += new System.EventHandler(this.menuItem6_Click);
//
// menuItem7
//
this.menuItem7.Index = 1;
this.menuItem7.Text = "灰度均衡";
this.menuItem7.Click += new System.EventHandler(this.menuItem7_Click);
//
// menuItem8
//
this.menuItem8.Index = 2;
this.menuItem8.Text = "边缘检测";
this.menuItem8.Click += new System.EventHandler(this.menuItem8_Click);
//
// menuItem20
//
this.menuItem20.Index = 3;
this.menuItem20.Text = "浮雕处理";
this.menuItem20.Click += new System.EventHandler(this.menuItem20_Click);
//
// menuItem21
//
this.menuItem21.Index = 4;
this.menuItem21.Text = "灰度处理";
this.menuItem21.Click += new System.EventHandler(this.menuItem21_Click);
//
// menuItem22
//
this.menuItem22.Index = 5;
this.menuItem22.Text = "加噪处理...";
this.menuItem22.Click += new System.EventHandler(this.menuItem22_Click);
//
// menuItem23
//
this.menuItem23.Index = 6;
this.menuItem23.Text = "亮度处理...";
this.menuItem23.Click += new System.EventHandler(this.menuItem23_Click);
//
// menuItem24
//
this.menuItem24.Index = 7;
this.menuItem24.Text = "透明处理...";
this.menuItem24.Click += new System.EventHandler(this.menuItem24_Click);
//
// menuItem3
//
this.menuItem3.Index = 2;
this.menuItem3.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem9,
this.menuItem10,
this.menuItem11,
this.menuItem12,
this.menuItem13,
this.menuItem14});
this.menuItem3.Text = "几何变换";
this.menuItem3.Visible = false;
//
// menuItem9
//
this.menuItem9.Index = 0;
this.menuItem9.Text = "图象平移";
this.menuItem9.Click += new System.EventHandler(this.menuItem9_Click);
//
// menuItem10
//
this.menuItem10.Index = 1;
this.menuItem10.Text = "垂直镜像";
this.menuItem10.Click += new System.EventHandler(this.menuItem10_Click);
//
// menuItem11
//
this.menuItem11.Index = 2;
this.menuItem11.Text = "水平镜像";
//
// menuItem12
//
this.menuItem12.Index = 3;
this.menuItem12.Text = "图象转置";
//
// menuItem13
//
this.menuItem13.Index = 4;
this.menuItem13.Text = "图象缩放...";
this.menuItem13.Click += new System.EventHandler(this.menuItem13_Click);
//
// menuItem14
//
this.menuItem14.Index = 5;
this.menuItem14.Text = "图象旋转...";
//
// menuItem4
//
this.menuItem4.Index = 3;
this.menuItem4.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem15});
this.menuItem4.Text = "数据编码";
this.menuItem4.Visible = false;
//
// menuItem15
//
this.menuItem15.Index = 0;
this.menuItem15.Text = "huffman编码...";
//
// menuItem5
//
this.menuItem5.Index = 4;
this.menuItem5.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem19});
this.menuItem5.Text = "帮助";
//
// menuItem19
//
this.menuItem19.Index = 0;
this.menuItem19.Text = "关于";
this.menuItem19.Click += new System.EventHandler(this.menuItem19_Click);
//
// pictureBox1
//
this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox1.Location = new System.Drawing.Point(8, 40);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(352, 304);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
this.pictureBox1.SizeChanged += new System.EventHandler(this.pictureBox1_SizeChanged);
//
// label1
//
this.label1.Location = new System.Drawing.Point(104, 8);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(128, 24);
this.label1.TabIndex = 1;
this.label1.Text = "原图象";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(8, 16);
this.ClientSize = new System.Drawing.Size(804, 545);
this.Controls.Add(this.label1);
this.Controls.Add(this.pictureBox1);
this.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.Menu = this.mainMenu1;
this.Name = "Form1";
this.Text = "数字图象处理";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void menuItem6_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics ( ) ;
g.Clear(this.BackColor);
Bitmap b= new Bitmap(pictureBox1.Image);
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
int nVal;
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
int nWidth = b.Width * 3;
for(int y=0;y<b.Height;++y)
{
for (int x = 0; x < nWidth; ++x)
{
nVal = (int) (255-p[0]);
p[0] = (byte)nVal;
++p;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
pictureBox1.Image=b;
g.Dispose();
//图象处理过程需要不少时间!应该修改下的!
/*以下算法是我参考李兰友老师的《Visual C#图象处理设计实例》,里面它写到彩色图象
的逆反处理算法是:
rr=255-c.R;gg=255-c.G;bb=255-c.B;
*/
// this.label2.Text="图象反色效果图";
// Color c = new Color();
// Bitmap box1= new Bitmap(pictureBox1.Image);
// for (int i=0;i<this.pictureBox1.Image.Width;i++)
// {
// for (int j=0;j<this.pictureBox1.Image.Height;j++)
// {
// c=box1.GetPixel(i,j);
// Color c1 = Color.FromArgb(255-c.R,255-c.G,255-c.B);
// box1.SetPixel(i,j,c1);
// }
// pictureBox1.Refresh();
// pictureBox1.Image=box1;
// }
//
// g.Dispose();
}
private void menuItem19_Click(object sender, System.EventArgs e)
{
Form2 newfrm2 = new Form2();
newfrm2.ShowDialog();//使用这条语句,别的窗体就不能操作了!
// newfrm2.Show(); //使用这条语句,还可以操作别的窗体!
}
private void menuItem18_Click(object sender, System.EventArgs e)
{

// this.Close();
Application.Exit();//用这条语句也可以的!
}
private void menuItem16_Click(object sender, System.EventArgs e)
{ openFileDialog1=new OpenFileDialog();
openFileDialog1.Filter = "Bitmap文件(*.bmp)|*.bmp| Jpeg文件(*.jpg)|*.jpg|所有合适文件(*.bmp / *.jpg)|*.bmp / *.jpg";
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;
if(DialogResult.OK == openFileDialog1.ShowDialog())
{
pictureBox1.Image=Bitmap.FromFile(openFileDialog1.FileName,false);
menuItem2.Visible=true;
menuItem3.Visible=true;
menuItem4.Visible=true;
}
//if (pictureBox2.Image!=null) pictureBox2.Image=null;
this.label1.Visible=true;
m_copybitmap=new Bitmap(this.pictureBox1.Image);
menuItem17.Visible=true;
menuItem25.Visible=true;
}
//有个问题,就是pictureBox1没有保持同图象的大小而变化,这样,使得图形有变形的
//可能
private void menuItem17_Click(object sender, System.EventArgs e)
{
m_bitmap=new Bitmap(pictureBox1.Image);//这很关键,若删除将无法看到处理后的效果!
saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Bitmap文件(*.bmp)|*.bmp|Jpeg文件(*.jpg)|*.jpg|所有合适文件(*.bmp / *.jpg)|*.bmp / *.jpg";
saveFileDialog1.FilterIndex = 2 ;
saveFileDialog1.RestoreDirectory = true ;
if(DialogResult.OK == saveFileDialog1.ShowDialog())
{
m_bitmap.Save(saveFileDialog1.FileName);
}
}
private void Form1_Load(object sender, System.EventArgs e)
{

}
private void menuItem20_Click(object sender, System.EventArgs e)
{
/*以下算法是我参考李兰友老师的《Visual C#图象处理设计实例》,里面它写到彩色图象的浮雕算法是:
g(i,j)=f(i,j)-f(i-1,j)+常数(常数通常取128)
eg:rr=Math.Abs(r2-r1+128)
我按照它的方法运行了下,效果和用上面程序实现的效果差异很大!
*/
//this.label2.Text="图象浮雕效果图";
Graphics g = this.CreateGraphics ( ) ;
g.Clear(this.BackColor);
Bitmap box1= new Bitmap(pictureBox1.Image);
for (int i=0;i<pictureBox1.Image.Width-1;i++)
{
for(int j=0;j<pictureBox1.Image.Height-1;j++)
{
Color Color1=box1.GetPixel(i,j);
Color Color2=box1.GetPixel(i+1,j+1);
int red=Math.Abs(Color1.R-Color2.R+128);
int green=Math.Abs(Color1.G-Color2.G+128);
int blue=Math.Abs(Color1.B-Color2.B+128);
//颜色处理
if(red>255) red=255;
if(red<0) red=0;
if(green>255) green=255;
if(green<0) green=0;
if(blue>255) blue=255;
if(blue<0) blue=0;
box1.SetPixel(i,j,Color.FromArgb(red,green,blue));
}
pictureBox1.Refresh();
pictureBox1.Image=box1;
}
g.Dispose();
}
private void menuItem23_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics ( ) ;
g.Clear(this.BackColor);
Form3 newform3=new Form3();
newform3.Text="设置图象的亮度!";
newform3.ShowDialog(this);
brightness=(int)newform3.trackBar1.Value;
newform3.Dispose();
Bitmap b= new Bitmap(pictureBox1.Image);
// GDI+ return format is BGR, NOT RGB.
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
int nVal;
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
int nWidth = b.Width * 3;
for(int y=0;y<b.Height;++y)
{
for (int x = 0; x < nWidth; ++x)
{
nVal = (int) (p[0] + brightness);
if (nVal < 0) nVal = 0;
if (nVal > 255) nVal = 255;
p[0] = (byte)nVal;
++p;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
pictureBox1.Image=b;
g.Dispose();
}
private void menuItem21_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics ( ) ;//用CreateGraphices()方法创建Graphics对象,这样最好有释放操作!
g.Clear(this.BackColor);//清除背景上可能存在的图案
// GDI+ return format is BGR, NOT RGB.
Bitmap b= new Bitmap(pictureBox1.Image);
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);//将指定区域的图象锁定到内存
int stride = bmData.Stride; // bytes in a row 3*b.Width,获取或设置扫描宽度
System.IntPtr Scan0 = bmData.Scan0;//获取或者设置位图中第一个像素数据的地址,它可以看成是位图中第一个扫描行
unsafe
{
byte * p = (byte *)(void *)Scan0;
byte red, green, blue;
int nOffset = stride - b.Width*3;
for(int y=0;y < b.Height;++y)
{
for(int x=0; x < b.Width; ++x )
{
blue = p[0];
green = p[1];
red = p[2];
p[0] = p[1] = p[2] = (byte)(.299 * red
+ .587 * green + .114 * blue);
p += 3;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
pictureBox1.Image=b;
g.Dispose();
/*以下算法是我参考李兰友老师的《Visual C#图象处理设计实例》,里面它写到彩色图象的灰度算法是:
rr=(c.R/64)*64;gg=(c.G/64)*64;bb=(c.B/64)*64;
我按照它的方法运行了下,效果和用上面程序实现的效果差异很大!
*/
// this.label2.Text="灰度效果图";
// Bitmap box1= new Bitmap(pictureBox1.Image);
// for (int i=0;i<pictureBox1.Image.Width-1;i++)
// {
// for(int j=0;j<pictureBox1.Image.Height-1;j++)
// {
// Color Color1=box1.GetPixel(i,j);
// int red=Math.Abs((Color1.R/128)*128);
// int green=Math.Abs((Color1.G/128)*128);
// int blue=Math.Abs((Color1.B/128)*128);
// //颜色处理
// if(red>255) red=255;
// if(red<0) red=0;
//
// if(green>255) green=255;
// if(green<0) green=0;
//
// if(blue>255) blue=255;
// if(blue<0) blue=0;
// box1.SetPixel(i,j,Color.FromArgb(red,green,blue));
// }
// pictureBox2.Refresh();
// pictureBox2.Image=box1;
// }
}
private void menuItem22_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics ( ) ;
g.Clear(this.BackColor);
Form3 newform3=new Form3();
newform3.Text="设置图象的噪声值!";
newform3.ShowDialog(this);
brightness=(int)newform3.trackBar1.Value;
newform3.Dispose();
Bitmap b= new Bitmap(pictureBox1.Image);
// GDI+ return format is BGR, NOT RGB.
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
int nVal;
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
int nWidth = b.Width * 3;
for(int y=0;y<b.Height;++y)
{
for (int x = 0; x < nWidth; ++x)
{
nVal = (int) (p[0] - brightness);
if (nVal < 0) nVal = 0;
if (nVal > 255) nVal = 255;
p[0] = (byte)nVal;
++p;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
pictureBox1.Image=b;
g.Dispose();
}
private void menuItem7_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics ( ) ;
g.Clear(this.BackColor);
Color c1 =new Color();
Color c2 =new Color();
Color c3 =new Color();
Color c4 =new Color();
Color c5=new Color();
Color c6 =new Color();
Color c7 =new Color();
Color c8 = new Color();
Color c9=new Color();
Bitmap box1= new Bitmap(pictureBox1.Image);
for (int i=1;i<this.pictureBox1.Image.Width-1;i++)
{
for (int j=1;j<this.pictureBox1.Image.Height-1;j++)
{
c1=box1.GetPixel(i-1,j-1);
c2=box1.GetPixel(i,j-1);
c3=box1.GetPixel(i+1,j-1);
c4=box1.GetPixel(i-1,j);
c5=box1.GetPixel(i,j);
c6=box1.GetPixel(i+1,j);
c7=box1.GetPixel(i-1,j+1);
c8=box1.GetPixel(i,j+1);
c9=box1.GetPixel(i+1,j+1);

int rr=Math.Abs((c1.R+c2.R+c3.R+c4.R+c5.R+c6.R+c7.R+c8.R+c9.R)/9);
if(rr<0) rr=0;
if(rr>255) rr=255;
int gg=Math.Abs((c1.G+c2.G+c3.G+c4.G+c5.G+c6.G+c7.G+c8.G+c9.G)/9);
if(gg<0) gg=0;
if(gg>255) gg=255;
int bb=Math.Abs((c1.B+c2.B+c3.B+c4.B+c5.B+c6.B+c7.B+c8.B+c9.B)/9);
if(bb<0) bb=0;
if(bb>255) bb=255;
Color c = Color.FromArgb(rr,gg,bb);
box1.SetPixel(i,j,c);
}
pictureBox1.Refresh();
pictureBox1.Image=box1;
}
g.Dispose();

}
private void menuItem8_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics ( ) ;
g.Clear(this.BackColor);
Color c1 =new Color();
Color c2 =new Color();
Color c3 =new Color();
Color c4 =new Color();
Bitmap box1= new Bitmap(pictureBox1.Image);
for (int i=0;i<this.pictureBox1.Image.Width-2;i++)
{
for (int j=0;j<this.pictureBox1.Image.Height-2;j++)
{
c1=box1.GetPixel(i,j);
c2=box1.GetPixel(i+1,j+1);
c3=box1.GetPixel(i+1,j);
c4=box1.GetPixel(i,j+1);
int rr=Math.Abs(c1.R-c2.R)+Math.Abs(c3.R-c4.R)+128;
if(rr<0) rr=0;
if(rr>255) rr=255;
int gg=Math.Abs(c1.G-c2.G)+Math.Abs(c3.G-c4.G)+128;
if(gg<0) gg=0;
if(gg>255) gg=255;
int bb=Math.Abs(c1.B-c2.B)+Math.Abs(c3.B-c4.B)+128;
if(bb<0) bb=0;
if(bb>255) bb=255;
Color c = Color.FromArgb(rr,gg,bb);
box1.SetPixel(i,j,c);
}
pictureBox1.Refresh();
pictureBox1.Image=box1;
}
g.Dispose();
}
private void menuItem9_Click(object sender, System.EventArgs e)
{
// this.pictureBox2.Visible=false;
// this.label2.Visible=false;
Bitmap box1= new Bitmap(pictureBox1.Image);
Graphics g = this.CreateGraphics ( ) ;
g.Clear(this.BackColor);
Matrix X = new Matrix ( ) ;
//创建Matrix实例
X.Translate ( 100,100 ) ;
//调用Matrix实例的Translate方法,并以此方法作用于Matrix实例
g.Transform = X ;
//设定图片效果
g.DrawImage ( box1 ,
new Rectangle ( this.pictureBox1.Width , 0 , box1.Width , box1.Height ) ,
0 ,0 , box1.Width ,
box1.Height ,
GraphicsUnit.Pixel ) ;
X.Dispose ( ) ;
g.Dispose ( ) ;
}
private void menuItem24_Click(object sender, System.EventArgs e)
{
//先把要处理的东西绘制到图象控件上,再在完成了所有的绘图操作后,把图象控件整个
//转给picturebox1控件,就是这个思路!
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
Bitmap bitmap=new Bitmap(pictureBox1.Image);
Bitmap bitmap1=new Bitmap(pictureBox1.Width,pictureBox1.Height);
Graphics g1= Graphics.FromImage(bitmap1);
float[][] ptsArray ={
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 0.5f, 0}, //注意:此处为0.1f,图像为强透明
new float[] {0, 0, 0, 0, 1}};
// MessageBox.Show("当前透明度设置为:"+ ptsArray[3][3]*100 + "%");
Form3 newform3 = new Form3();
newform3.trackBar1.SetRange(10,100);
newform3.trackBar1.SmallChange=10;
newform3.label1.Text="10";
newform3.label3.Text="100";
newform3.trackBar1.Value=50;
newform3.label2.Text="";
newform3.Text="设置透明度";
newform3.ShowDialog(this);//注意一定不能把newform3的属性设置放在此句后,否则……
ptsArray[3][3]=(float)newform3.trackBar1.Value/100;
ColorMatrix clrMatrix = new ColorMatrix(ptsArray);
ImageAttributes imgAttributes = new ImageAttributes();
//设置图像的颜色属性
imgAttributes.SetColorMatrix(clrMatrix, ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
//画图像
g1.DrawImage(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height),
0, 0, bitmap.Width, bitmap.Height,
GraphicsUnit.Pixel, imgAttributes);
this.pictureBox1.Image=bitmap1;
g.Dispose();
newform3.Dispose();
}
private void menuItem10_Click(object sender, System.EventArgs e)
{

}
private void menuItem13_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics ( ) ;
g.Clear(this.BackColor);
Bitmap BmpTemp= new Bitmap(pictureBox1.Image);
Matrix X = new Matrix ( ) ;
//创建Matrix实例
X.Scale ( (float)0.5 ,1 , MatrixOrder.Append ) ;
//调用Matrix实例的Scale方法,并以此方法作用于Matrix实例
g.Transform = X ;
g.DrawImage ( BmpTemp ,
new Rectangle ( 10 ,250 , 200 , 200 ) ,
0 , 0 , BmpTemp.Width ,
BmpTemp.Height ,
GraphicsUnit.Pixel ) ;
X.Dispose ( ) ;
g.Dispose ( ) ;
//清除资源

}
private void pictureBox1_SizeChanged(object sender, System.EventArgs e)
{
// pictureBox2.Location=new Point(this.pictureBox1.Width,this.pictureBox1.ClientRectangle.Y);
}
private void menuItem25_Click(object sender, System.EventArgs e)
{
Graphics g= this.CreateGraphics();
g.Clear(this.BackColor);
this.pictureBox1.Image=m_copybitmap;
g.Dispose();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: