超级舒服好用的颜色滤镜算法

三原色颜色滤镜

在网上很容易找到对图片处理的红色滤镜,黄色滤镜,蓝色滤镜等三原色或者两个三原色组合颜色的滤镜。
代码很简单

 private void SetLving(int rl, int gl, int bl, Bitmap drawImg)
        {
            Color color;
            int r, g, b;
            for (int i = 0; i < drawImg.Width; i++)
            {
                for (int j = 0; j < drawImg.Height; j++)
                {
                    color = drawImg.GetPixel(i, j);
                    r = (rl == 0 ? 0 : color.R);
                    g = (gl == 0 ? 0 : color.G);
                    b = (bl == 0 ? 0 : color.B);
                    drawImg.SetPixel(i, j, Color.FromArgb(r, g, b));
                }
            }
        }

调用方法如下

						SetLving(1, 0, 0, bitmap);//红色滤镜
                        //SetLving(0, 1, 0, bitmap);//绿色滤镜
                        //SetLving(0, 0, 1, bitmap);//蓝色滤镜
                        //SetLving(1, 1, 0, bitmap);//黄色滤镜
                        //SetLving(1, 0, 1, bitmap);//紫色滤镜
                        //SetLving(0, 1, 1, bitmap);//青色滤镜

效果如下:

原图
在这里插入图片描述
红色滤镜
在这里插入图片描述

绿色滤镜
在这里插入图片描述

蓝色滤镜
在这里插入图片描述

黄色滤镜
在这里插入图片描述
紫色滤镜
在这里插入图片描述

青色滤镜
在这里插入图片描述

问题来了,假如我需要粉红色的滤镜呢

那么问题来了,假如我需要粉红色的滤镜呢,或者其他不是上面这几种颜色的滤镜呢,或者任何一种颜色的滤镜呢,在网上几乎没有找到相关代码
思虑良久是否可以通过去色,然后添加颜色的方法呢?
有看到一句话说三个值设置成一样就是纯灰色,也就是说RGB(0,0,0)纯黑,RGB(255,255,255)纯白
简单就是最灰,最不灰,但是RGB的比例是不变的
我只要保证RGB的比例,就可以固定的添加某一种颜色的滤镜了
于是最终我找到了粉红色的滤镜算法

粉红滤镜算法

/// <summary>
        /// 颜色滤镜
        /// </summary>
        /// <param name="color0">你想设置的滤镜颜色</param>
        /// <param name="drawImg">你想添加滤镜的图片</param>
        private void SetLving(Color color0, Bitmap drawImg)
        {
            Color color;
            int r, g, b;
            for (int i = 0; i < drawImg.Width; i++)
            {
                for (int j = 0; j < drawImg.Height; j++)
                {
                    color = drawImg.GetPixel(i, j);

                    //用网上找到的一个求灰度的公式求出灰度值,当然,这个公式还可以乘以一个投影,得到你最终想要的滤镜效果
                    int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);

                    //除以255求出一个比例
                    double ratio = (double)gray / 255.0;

                    //用你想要的滤镜颜色的RGB分别乘以这个比例,得到不同深浅的RGB,保留图片细节
                    r = (int)(color0.R * ratio);
                    g = (int)(color0.G * ratio);
                    b = (int)(color0.B * ratio);
                    drawImg.SetPixel(i, j, Color.FromArgb(r,g,b));
                }
            }
        }

当当当!粉红滤镜就完成了!
在这里插入图片描述

如果你有更好的算法或者建议,欢迎讨论哦!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪汪星河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值