首页  ·  知识 ·  编程语言
超酷的图像效果c#
ziyiFly  http://www.cnblogs.com/ziyiFly/archive/2008/09/23/  .NET  编辑:dezai  图片来源:网络
先让大家看看今天的原始图片: "FONT-SIZE: x-small">ISINBAEVA ~~~~~~~~
先让大家看看今天的原始图片: ISINBAEVA ~~~~~~~~

 

一. 底片效果
原理: GetPixel方法获得每一点像素的值, 然后再使用SetPixel方法将取反后的颜色值设置到对应的点.
效果图:

代码实现:


private void button1_Click(object sender, EventArgs e)
{
//以底片效果显示图像
try
{
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;
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.pictureBox1.Image = newbitmap;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,
"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

 

二. 浮雕效果

原理: 对图像像素点的像素值分别与相邻像素点的像素值相减后加上128, 然后将其作为新的像素点的值.

效果图:

代码实现:


private void button1_Click(object sender, EventArgs e)
{
//以浮雕效果显示图像
try
{
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 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.pictureBox1.Image = newBitmap;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,
"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

 

三. 黑白效果

原理: 彩色图像处理成黑白效果通常有3种算法;

(1).最大值法: 使每个像素点的 R, G, B 值等于原像素点的 RGB (颜色值) 中最大的一个;

(2).平均值法: 使用每个像素点的 R,G,B值等于原像素点的RGB值的平均值;

(3).加权平均值法: 对每个像素点的 R, G, B值进行加权

    ---自认为第三种方法做出来的黑白效果图像最 "真实".

效果图:

代码实现:

黑白效果

 

四. 柔化效果

原理: 当前像素点与周围像素点的颜色差距较大时取其平均值.

效果图:

代码实现:


private void button1_Click(object sender, EventArgs e)
{
//以柔化效果显示图像
try
{
int Height = this.pictureBox1.Image.Height;
int Width = this.pictureBox1.Image.Width;
Bitmap bitmap
= new Bitmap(Width, Height);
Bitmap MyBitmap
= (Bitmap)this.pictureBox1.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.pictureBox1.Image = bitmap;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,
"信息提示");
}
}

 

五.锐化效果

原理:突出显示颜色值大(即形成形体边缘)的像素点.

效果图:

实现代码:


private void button1_Click(object sender, EventArgs e)
{
//以锐化效果显示图像
try
{
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;
//拉普拉斯模板
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.pictureBox1.Image = newBitmap;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,
"信息提示");
}
}

 

本文作者:ziyiFly 来源:http://www.cnblogs.com/ziyiFly/archive/2008/09/23/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读