源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#灰度化图像的实例代码

  • 时间:2021-03-06 05:01 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#灰度化图像的实例代码
用伪语句可以表示如下 public bitmap GrayScal(bitmap orgbmp) {     建立一个与原图片等大的8位的图片     取出原图像中的每一个点     新图像的点=原图像点的红色量*系数1+绿色量*系数2+黄色量*系统3     返回新图像 }
[u]复制代码[/u] 代码如下:
/// <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;             }         }     }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部