• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

转一篇C#图片处理(看完后你会知道PS原来是这样做的)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原始图片: 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);
= 255 - pixel.R;
= 255 - pixel.G;
= 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);
= Math.Abs(pixel1.R - pixel2.R + 128);
= Math.Abs(pixel1.G - pixel2.G + 128);
= Math.Abs(pixel1.B - pixel2.B + 128);
if (r > 255)
= 255;
if (r < 0)
= 0;
if (g > 255)
= 255;
if (g < 0)
= 0;
if (b > 255)
= 255;
if (b < 0)
= 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 newBitmap 
= new Bitmap(Width, Height);
Bitmap oldBitmap 
= (Bitmap)this.pictureBox1.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;
= pixel.R;
= pixel.G;
= 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;
}
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 bitmap 
= new Bitmap(Width, Height);
Bitmap MyBitmap 
= (Bitmap)this.pictureBox1.Image;
Color pixel;
//高斯模板
                int[] Gauss =121242121 };
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);
+= pixel.R * Gauss[Index];
+= pixel.G * Gauss[Index];
+= pixel.B * Gauss[Index];
Index
++;
}
/= 16;
/= 16;
/= 16;
//处理颜色值溢出
                        r = r > 255 ? 255 : r;
= r < 0 ? 0 : r;
= g > 255 ? 255 : g;
= g < 0 ? 0 : g;
= b > 255 ? 255 : 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-19-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];
+= pixel.G * Laplacian[Index];
+= pixel.B * Laplacian[Index];
Index
++;
}
//处理颜色值溢出
                        r = r > 255 ? 255 : r;
= r < 0 ? 0 : r;
= g > 255 ? 255 : g;
= g < 0 ? 0 : g;
= b > 255 ? 255 : 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, 
"信息提示");
}


六. 雾化效果

原理: 在图像中引入一定的随机值, 打乱图像中的像素值

效果图:



实现代码:

雾化效果
       
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 - 1; x++)
for (int y = 1; y < Height - 1; y++)
{
System.Random MyRandom 
= new Random();
int k = MyRandom.Next(123456);
//像素块大小
                        int dx = x + k % 19;
int dy = y + k % 19;
if (dx >= Width)
dx 
= Width - 1;
if (dy >= Height)
dy 
= Height - 1;
pixel 
= oldBitmap.GetPixel(dx, dy);
newBitmap.SetPixel(x, y, pixel);
}
this.pictureBox1.Image = newBitmap;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, 
"信息提示");
}


七. 光照效果

原理: 对图像中的某一范围内的像素的亮度分别进行处理.

效果图:



实现代码:

光照效果
       
private void button1_Click(object sender, EventArgs e)
{
//以光照效果显示图像
            Graphics MyGraphics = this.pictureBox1.CreateGraphics();
MyGraphics.Clear(Color.White);
Bitmap MyBmp 
= new Bitmap(this.pictureBox1.Image, this.pictureBox1.Width, this.pictureBox1.Height);
int MyWidth = MyBmp.Width;
int MyHeight = MyBmp.Height;
Bitmap MyImage 
= MyBmp.Clone(new RectangleF(00, MyWidth, MyHeight), System.Drawing.Imaging.PixelFormat.DontCare);
int A = Width / 2;
int B = Height / 2;
//MyCenter图片中心点,发亮此值会让强光中心发生偏移
            Point MyCenter = new Point(MyWidth / 2, MyHeight / 2);
//R强光照射面的半径,即”光晕”
            int R = Math.Min(MyWidth / 2, MyHeight / 2);
for (int i = MyWidth - 1; i >= 1; i--)
{
for (int j = MyHeight - 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[VB.NET,C#] - 用户自定义控件(含源代码) - DataGridView添加背景图片 ...发布时间:2022-07-13
下一篇:
C#实现序列化和反序列化发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap