超级舒服好用的颜色滤镜算法 c#
三原色颜色滤镜
在网上很容易找到对图片处理的红色滤镜,黄色滤镜,蓝色滤镜等三原色或者两个三原色组合颜色的滤镜。
代码很简单
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));
}
}
}
当当当!粉红滤镜就完成了!
如果你有更好的算法或者建议,欢迎讨论哦!