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;             }

相关内容

热门资讯

微扑克辅助器!德州平台有没有挂... 您好:德州平台有没有挂这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌...
AApoker透视挂!wepo... 很多人使用云端 AI 时,都担心wepoker透视挂是真的吗、内部资料上传带来隐私风险。这款本地运行...
WePoKer透视!wepok... WePoKer透视!wepoker如何拿到好牌,分享透视多功能软件APP模板;近期一款 AI 黑科技...
红龙扑克透视挂!德扑之星规律,... 红龙扑克透视挂!德扑之星规律,解迷透视挂多功能插件APP法门是一款可以让一直输的玩家,快速成为一个“...
aapoker透视!WePoK... 您好,WePoKer有没有透视软件挂这款游戏可以开挂的,确实是有挂的,需要了解加微【48527505...
红龙扑克开挂!微扑克的辅助工具... 很多人使用云端 AI 时,都担心微扑克的辅助工具有哪些、内部资料上传带来隐私风险。这款本地运行的 A...
aapoker辅助!wepok... 您好:wepoker私人局怎么设置抽水这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会...
aapoker辅助挂!wepo... aapoker辅助挂!wepoker透视挂安全吗,普及辅助挂多功能方法APP策略AI 智能体黑科技再...
红龙PoKer辅助挂!wepo... 您好:wepokerplus透视挂真的假的这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌...
德扑之星辅助挂!德州ai辅助有... 德扑之星辅助挂!德州ai辅助有用吗,详细辅助挂多功能下载APP指南书是一款可以让一直输的玩家,快速成...