如何使用C#去灰度化一幅图像
2013-09-28 17:24
316 查看
灰度化一幅图像就是将图像的色彩信息全部丢掉,将24位的位图信息,用8位来表示,灰度图共有256级灰度等级,也就是将24位位图的一点如(255,255,255)转换成255,所以R,G,B三个值所乘的系数和为1
用伪语句可以表示如下
public bitmap GrayScal(bitmap orgbmp)
{
建立一个与原图片等大的8位的图片
取出原图像中的每一个点
新图像的点=原图像点的红色量*系数1+绿色量*系数2+黄色量*系统3
返回新图像
}
用伪语句可以表示如下
public bitmap GrayScal(bitmap orgbmp)
{
建立一个与原图片等大的8位的图片
取出原图像中的每一个点
新图像的点=原图像点的红色量*系数1+绿色量*系数2+黄色量*系统3
返回新图像
}
/// <summary> /// 对图像进行点运算, /// </summary> public class PointTrans { private readonly double cb; private readonly double cg; private readonly double cr; /// <summary> /// 做点运算,要给每一个偏量,做一下设置,比如做图像的灰度图就需要现设置 /// </summary> /// <param name="cr"></param> /// <param name="cg"></param> /// <param name="cb"></param> public PointTrans(double cr, double cg, double cb) { this.cr = cr; this.cg = cg; this.cb = cb; } public Bitmap GrayScaleBmp(Bitmap orgData) { int bmpWidth = orgData.Width, bmpHeight = orgData.Height; Bitmap destData = ImageTools.CreateGrayscaleImage(bmpWidth, bmpHeight); Rectangle bmpRect=new Rectangle(0,0,bmpWidth,bmpHeight); BitmapData orgBmpData = orgData.LockBits(bmpRect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); BitmapData destBmpData = destData.LockBits(bmpRect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); ProcessFilter(orgBmpData,destBmpData); orgData.UnlockBits(orgBmpData); destData.UnlockBits(destBmpData); return destData; } protected unsafe void ProcessFilter(BitmapData sourceData, BitmapData destinationData) { // get width and height int width = sourceData.Width; int height = sourceData.Height; int srcOffset = sourceData.Stride - width*3; int dstOffset = destinationData.Stride - width; // do the job byte* src = (byte*) sourceData.Scan0.ToPointer(); byte* dst = (byte*) destinationData.Scan0.ToPointer(); // for each line for (int y = 0; y < height; y++) { // for each pixel for (int x = 0; x < width; x++, src += 3, dst++) { *dst = (byte) (cr*src[RGB.R] + cg*src[RGB.G] + cb*src[RGB.B]); } src += srcOffset; dst += dstOffset; } } }
相关文章推荐
- 如何使用C#去灰度化一幅图像
- 如何以编程方式编译使用 C# 编译器代码
- 如何在iOS中使用ZXing库(ZXing是一个开源的条码生成和扫描库,开源协议为Apache2.0。它持众多条码格式和语言,比如Java、 C++、 C#、 Objective-C以及Act )
- 使用C#进行图像处理的几种方法
- 如何使用 C# 验证邮件地址 .
- C#中如何使用FindWindow来查找Word,计算器,Notepad等软件
- iOS开发的一些小技术:让UIImage有缩放功能、控制log的输出、xcode修改文件注释、随机数的使用、在UIImageView 中旋转图像、在Quartz中如何设置旋转点、创建.plist文件并存储
- 如何使用GDAL重采样图像
- 如何使用C#连接SQLServer
- 如何在C#中使用 Win32和其他库
- 在.net平台上如何创建和使用web 服务(C#)
- 如何高效使用SQLite .net (C#)
- 使用VSCode如何调试C#控制台程序_2_加深总结
- C#如何使用右下角托盘图标notifyIcon
- 浅谈如何在C#Winform程序中正确使用登录窗体
- C#中如何使用FindWindow来查找Word,计算器,Notepad等软件
- 如何通过使用窗体身份验证和 Visual C#.NET 对 Active Directory 验证身份
- c#如何使用正则表达式ZZ
- 使用 C# 实现图像的边缘检测
- 如何在C# 中使用WMI 实现远程查询和共享