C#数字图象处理之图像灰度化方法

 更新时间:2015年04月24日 09:07:08   作者:沧海一粟……  
这篇文章主要介绍了C#数字图象处理之图像灰度化方法,涉及C#基于Bitmap类操作图像的相关技巧,需要的朋友可以参考下

本文实例讲述了C#数字图象处理之图像灰度化方法。分享给大家供大家参考。具体如下:

//定义图像灰度化函数
private static Bitmap PGray(Bitmap src)
{
  int w = src.Width;
  int h = src.Height;
//构建与原图像大小一样的模版图像
  Bitmap dstBitmap = new Bitmap(src.Width, src.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
//将原图像存入内存
  System.Drawing.Imaging.BitmapData srcData = src.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  System.Drawing.Imaging.BitmapData dstData = dstBitmap.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  unsafe
  {
 byte* pIn = (byte*)srcData.Scan0.ToPointer();
 byte* pOut = (byte*)dstData.Scan0.ToPointer();
 byte* p;
 int stride = srcData.Stride;
 int r, g, b;
 for (int y = 0; y < h; y++)
 {
   for (int x = 0; x < w; x++)
   {
 p = pIn;
 r = p[2];
 g = p[1];
 b = p[0];
//调用图像灰度化公式
 pOut[0] = pOut[1] = pOut[2] = (byte)(b * 0.114 + g * 0.587 + r * 0.299);  
 pIn += 3;
 pOut += 3;
   }
   pIn += srcData.Stride - w * 3;
   pOut += srcData.Stride - w * 3;
 }
 src.UnlockBits(srcData);
 dstBitmap.UnlockBits(dstData);
 return dstBitmap;
  }
}

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • C#中加盐(salting)的实现示例

    C#中加盐(salting)的实现示例

    在密码存储和验证中,加盐是一种增加密码安全性的技术,本文主要介绍了C#中加盐(salting)的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • C#备忘录模式(Memento Pattern)实例教程

    C#备忘录模式(Memento Pattern)实例教程

    这篇文章主要介绍了C#备忘录模式(Memento Pattern),以一个支持回退操作的例子讲述了C#备忘模式的实现方法,需要的朋友可以参考下
    2014-09-09
  • C# 解决datagridview控件显示大量数据拖拉卡顿问题

    C# 解决datagridview控件显示大量数据拖拉卡顿问题

    这篇文章主要介绍了C# 解决datagridview控件显示大量数据拖拉卡顿问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C#实现简单的计算器小功能

    C#实现简单的计算器小功能

    这篇文章主要为大家详细介绍了C#实现简单的计算器小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C# String Replace高效的实例方法

    C# String Replace高效的实例方法

    C# String Replace高效的实例方法,需要的朋友可以参考一下
    2013-05-05
  • c#中task与thread区别及其使用的方法示例

    c#中task与thread区别及其使用的方法示例

    本文主要介绍了c#中task与thread区别及其使用的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#实现桶排序算法的示例代码

    C#实现桶排序算法的示例代码

    桶排序是一种快速且高效的排序算法,通过将数据分配到有序桶中并分别排序,适合均匀分布数据,它的时间复杂度为O(n),但不适合数据分布极不均匀或数据范围很大的情况,桶排序算法简单、易实现,可调整桶的大小和数量以适应不同数据,感兴趣的可以了解一下
    2024-10-10
  • ASP.Net动态读取Excel文件最简方法

    ASP.Net动态读取Excel文件最简方法

    本篇文章给大家分享了ASP.Net动态读取Excel文件最简方法,对此有需要的读者们参考学习下。
    2018-05-05
  • C#实现飞行棋游戏

    C#实现飞行棋游戏

    这篇文章主要为大家详细介绍了C#实现飞行棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#实现简单俄罗斯方块

    C#实现简单俄罗斯方块

    这篇文章主要为大家详细介绍了C#实现简单俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03

最新评论