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

时间:2023-07-14 07:35:34 

用伪语句可以表示如下

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#,灰度化,图像
0
投稿

猜你喜欢

  • 一文搞懂C#实现读写文本文件中的数据

    2021-11-07 00:21:07
  • JAVA 静态代理模式详解及实例应用

    2021-10-20 05:39:00
  • android自定义view用path画长方形

    2022-07-20 21:03:00
  • 详解SpringCloud微服务之Rest

    2023-10-20 00:49:36
  • Java 多用户登录限制的实现方法

    2022-04-06 07:32:46
  • spring使用OXM进行对象XML映射解析

    2022-11-11 16:05:19
  • Java接入支付宝授权第三方登录的完整步骤

    2023-01-05 01:13:54
  • C#词法分析器之构造NFA详解

    2022-04-10 02:11:43
  • 详解Android中Notification通知提醒

    2023-09-10 09:57:19
  • springboot嵌套子类使用方式—前端与后台开发的注意事项

    2023-09-16 12:37:22
  • Java学习基础之安装JDK/配置JDK环境&IEDA工具安装

    2023-02-09 13:02:40
  • SpringBoot集成MybatisPlus报错的解决方案

    2022-06-28 05:03:20
  • Java的Spring框架中AOP项目的一般配置和部署教程

    2021-07-26 16:49:25
  • 详解java nio中的select和channel

    2021-08-09 19:17:39
  • Android仿微信朋友圈点击加号添加图片功能

    2022-11-28 12:44:45
  • java代理模式(静态代理、动态代理、cglib代理)

    2022-11-22 16:12:49
  • 浅谈C# 中的委托和事件

    2021-06-06 18:53:07
  • C#加密解密类实例程序

    2022-01-25 18:17:09
  • Java新手学习之IO流的简单使用

    2023-08-09 15:57:33
  • Android TextSwitcher文本切换器和ViewFlipper使用详解

    2023-09-20 01:01:50
  • asp之家 软件编程 m.aspxhome.com