图像处理系统设计
一、设计目的
随着社会的发展,数码相机以及相关产品的使用率大大增加,使得电子相片越来越普及。
由于使用者的经验不是很足,导致很多相片都达不到很好的效果,这迫切需要一款图像处理
软件,为此我开发设计了图像处理系统,服务大众。
二、设计思路
1.文件:打开,保存,另存为;
2.图像:垂直翻转、水平翻转、翻转 90 度;
3.滤镜:浮雕、黑白、反色、锐化、反色、棕褐色;
三、流程图
四、界面设计
五、关键代码
1.浮雕处理
打开
处理
图片
保存
private void btnfudiao_Click(object sender, EventArgs e) //以浮雕效果显示图像
{
if (pictureBox1.Image == null)
{
MessageBox.Show("没有可处理的图片,请导入!");
return;
}
int Width = this.pictureBox1.Image.Width;
int Height = this.pictureBox1.Image.Height;
Bitmap newBitmap = new Bitmap(Width, Height);
Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image;
Color pixel1, pixel2;
double q; int w;
progressBar1.Value = 0;
progressBar1.Maximum = Width;
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));
}
progressBar1.Value++;
q = (progressBar1.Value / double.Parse(progressBar1.Maximum.ToString())) * 100;
w = Convert.ToInt16(q);
label1.Refresh();
label1.Text = w.ToString() + "%";
}
this.pictureBox2.Image = newBitmap;
}
2.黑白处理
private void btnheibai_Click(object sender, EventArgs e) //以黑白效果显示图
像
{
if (pictureBox1.Image == null)
{
MessageBox.Show("没有可处理的图片,请导入!");
return;
}
int Height = this.pictureBox1.Image.Height;
int Width = this.pictureBox1.Image.Width;
Bitmap newBitmap = new Bitmap(Width, Height);
Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image;
Color pixel;
double q; int w;
progressBar1.Value = 0;
progressBar1.Maximum = Width;
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));
}
progressBar1.Value++;
q = (progressBar1.Value / double.Parse(progressBar1.Maximum.ToString())) * 100;
w = Convert.ToInt16(q);
label1.Refresh();
label1.Text = w.ToString() + "%";
}
this.pictureBox2.Image = newBitmap;
}
3.柔化处理