WinForm中使用Bitmap元素处理图像
创始人
2024-11-11 22:06:45
0

前言

这个Bitmap元素在我们处理图像显示相关时,它的身影就可以见到了。官方术语:封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。 Bitmap 是用于处理由像素数据定义的图像的对象。操作对象最重要的两个方法GetPixel和SetPixel。

一、效果

1、光环效果

2、亮度调节

3、彩色转黑白

4、色温反转

5、马赛克

6、扩散效果

二、代码示例

1、光环效果
 if (bitmap != null)             {                 newbitmap = bitmap.Clone() as Bitmap;                  stopwatch.Restart();                  int width = newbitmap.Width;                 int height = newbitmap.Height;                 float cx = width / 2;                 float cy = height / 2;                 float maxDist = cx * cx + cy * cy;                 float currDist = 0, factor;                 Color pixel;                  for (int i = 0; i < width; i++)                 {                     for (int j = 0; j < height; j++)                     {                         currDist = ((float)i - cx) * ((float)i - cx) + ((float)j - cy) * ((float)j - cy);                         factor = currDist / maxDist;                          pixel = newbitmap.GetPixel(i, j);                         int red = (int)(pixel.R * (1 - factor));                         int green = (int)(pixel.G * (1 - factor));                         int blue = (int)(pixel.B * (1 - factor));                         newbitmap.SetPixel(i, j, Color.FromArgb(red, green, blue));                     }                 }                  stopwatch.Stop();                 lbTimer.Text = stopwatch.ElapsedMilliseconds.ToString() + " ms";                 pictureBox2.Image = newbitmap.Clone() as Image;             }
2、亮度调节
if (bitmap != null)             {                 newbitmap = bitmap.Clone() as Bitmap;                 stopwatch.Reset();                 stopwatch.Restart();                 Color pixel;                 int red, green, blue;                 for (int x = 0; x < newbitmap.Width; x++)                 {                     for (int y = 0; y < newbitmap.Height; y++)                     {                         pixel = newbitmap.GetPixel(x, y);                         red = (int)(pixel.R * 0.6);                         green = (int)(pixel.G * 0.6);                         blue = (int)(pixel.B * 0.6);                         newbitmap.SetPixel(x, y, Color.FromArgb(red, green, blue));                     }                 }                 stopwatch.Stop();                 lbTimer.Text = stopwatch.ElapsedMilliseconds.ToString() + " ms";                 pictureBox2.Image = newbitmap.Clone() as Image;             }
3、彩色转黑白
if (bitmap != null)             {                 newbitmap = bitmap.Clone() as Bitmap;                 stopwatch.Reset();                 stopwatch.Restart();                 Color pixel;                 int gray;                 for (int x = 0; x < newbitmap.Width; x++)                 {                     for (int y = 0; y < newbitmap.Height; y++)                     {                         pixel = newbitmap.GetPixel(x, y);                         gray = (int)(0.3 * pixel.R + 0.59 * pixel.G + 0.11 * pixel.B);                         newbitmap.SetPixel(x, y, Color.FromArgb(gray, gray, gray));                     }                 }                 stopwatch.Stop();                 lbTimer.Text = stopwatch.ElapsedMilliseconds.ToString() + " ms";                 pictureBox2.Image = newbitmap.Clone() as Image;             }
4、色温反转
 if (bitmap != null)             {                 newbitmap = bitmap.Clone() as Bitmap;                 stopwatch.Restart();                 Color pixel;                 int red, green, blue;                 for (int x = 0; x < newbitmap.Width; x++)                 {                     for (int y = 0; y < newbitmap.Height; y++)                     {                         pixel = newbitmap.GetPixel(x, y);                         red = (int)(255 - pixel.R);                         green = (int)(255 - pixel.G);                         blue = (int)(255 - pixel.B);                         newbitmap.SetPixel(x, y, Color.FromArgb(red, green, blue));                     }                 }                 stopwatch.Stop();                 lbTimer.Text = stopwatch.ElapsedMilliseconds.ToString() + " ms";                 pictureBox2.Image = newbitmap.Clone() as Image;             }
5、马赛克
if (bitmap != null)             {                 newbitmap = bitmap.Clone() as Bitmap;                 stopwatch.Reset();                 stopwatch.Restart();                 int RIDIO = 50;//马赛克的尺度,默认为周围两个像素                 for (int h = 0; h < newbitmap.Height; h += RIDIO)                 {                     for (int w = 0; w < newbitmap.Width; w += RIDIO)                     {                         int avgRed = 0, avgGreen = 0, avgBlue = 0;                         int count = 0;                         //取周围的像素                         for (int x = w; (x < w + RIDIO && x < newbitmap.Width); x++)                         {                             for (int y = h; (y < h + RIDIO && y < newbitmap.Height); y++)                             {                                 Color pixel = newbitmap.GetPixel(x, y);                                 avgRed += pixel.R;                                 avgGreen += pixel.G;                                 avgBlue += pixel.B;                                 count++;                             }                         }                          //取平均值                         avgRed = avgRed / count;                         avgBlue = avgBlue / count;                         avgGreen = avgGreen / count;                          //设置颜色                         for (int x = w; (x < w + RIDIO && x < newbitmap.Width); x++)                         {                             for (int y = h; (y < h + RIDIO && y < newbitmap.Height); y++)                             {                                 Color newColor = Color.FromArgb(avgRed, avgGreen, avgBlue);                                 newbitmap.SetPixel(x, y, newColor);                             }                         }                     }                 }                 stopwatch.Stop();                 lbTimer.Text = stopwatch.ElapsedMilliseconds.ToString() + " ms";                 pictureBox2.Image = newbitmap.Clone() as Image;             }
6、扩散效果
if (bitmap != null)             {                 newbitmap = bitmap.Clone() as Bitmap;                 stopwatch.Reset();                 stopwatch.Restart();                 Color pixel;                 int red, green, blue;                 int flag = 0;                 for (int x = 0; x < newbitmap.Width; x++)                 {                     for (int y = 0; y < newbitmap.Height; y++)                     {                         Random ran = new Random();                         int RankKey = ran.Next(-5, 5);                         if (x + RankKey >= newbitmap.Width || y + RankKey >= newbitmap.Height || x + RankKey < 0 || y + RankKey < 0)                         {                             flag = 1;                             continue;                         }                          pixel = newbitmap.GetPixel(x + RankKey, y + RankKey);                         red = (int)(pixel.R);                         green = (int)(pixel.G);                         blue = (int)(pixel.B);                         newbitmap.SetPixel(x, y, Color.FromArgb(red, green, blue));                     }                 }                 stopwatch.Stop();                 lbTimer.Text = stopwatch.ElapsedMilliseconds.ToString();                 pictureBox2.Image = newbitmap.Clone() as Image;             }

相关内容

热门资讯

微扑克有辅助挂(微扑克)微扑克... 微扑克有辅助挂(微扑克)微扑克有挂么(透视)确实存在有挂(详细辅助软件教程);1、构建自己的微扑克有...
aapoker猫腻!aapok... 这是一款非常优秀的aapoker猫腻 ia辅助检测软件,能够让你了解到aapoker猫腻中牌率当中全...
wpk提高胜率!wpk德州俱乐... 1、wpk提高胜率!wpk德州俱乐部机器人(透视)外挂透视辅助挂(最初有挂);详细教程。2、透视辅助...
WePoKe外 挂(透视)we... WePoKe外 挂(透视)wepoke透明挂件(详细辅助普及教程)竟然是真的有挂(大神有辅助挂);1...
微扑克全自动机器人(微扑克)微... 微扑克全自动机器人(微扑克)微扑克怎么在软件内设置(透视)果然真的有挂(详细辅助爆料教程)1、微扑克...
aapoker透明挂!aa扑克... aapoker透明挂!aa扑克有挂吗,(aapoker工具)真是真的有挂(详细辅助2025新版教程)...
wpk透明挂!德州wpk辅助真... 《wpk透明挂!德州wpk辅助真的(透视)外挂透视挂辅助挂(一贯是真的有挂)》 软件透明挂更新公告新...
wepoke的确有挂(透视)w... wepoke的确有挂(透视)wepoke软件下载(详细辅助第三方教程)切实是真的有挂(攻略ai机器人...
微扑克辅助器ios(微扑克)微... 微扑克辅助器ios(微扑克)微扑克辅助哪里有卖(透视)果然真的是有挂(详细辅助细节揭秘)1、完成微扑...
aa扑克辅助!aa扑克辅助,(... aa扑克辅助!aa扑克辅助,(aapoker能玩)好像是真的有挂(详细辅助总结教程);揭秘教程安装方...