C#Color Blend和像Photoshop

时间:2015-10-28 20:57:37

标签: c# image-processing photoshop alpha blending

我有一张图片,我试图处理一个非常具体的外观。我在Photoshop中找到了一个教程,并且一步一步地慢慢地重新创建了Photoshop效果。最新的一种颜色混合模式,我能够工作,但他们添加了一个alpha,它让我难倒。

Photoshop通过创建过滤器,设置颜色,选择" Blend"然后应用alpha。 alpha适用于过滤器,而不适用于基本图像。

我正在做的是采用两种颜色,基本图像和叠加颜色进行混合,并将它们转换为HSL。我通过从叠加层获取色相/饱和度并从基底获取亮度并创建新的HSL颜色来计算混合。然后我将其转换为RGB并将该像素写入原始基色的位图。

我不知道怎么做是应用alpha。看起来我应该采用基色和混合的产品,并在它们之间形成alpha。我不确定这是否正确,或者在哪里找到颜色之间的正确计算。

我不认为需要这个问题的代码,但如果你需要它,我可以发布一些。

由于

1 个答案:

答案 0 :(得分:0)

我刚刚解决了这个问题(background.png和colorWithAlpha.png具有相同的尺寸):

Bitmap bg = new Bitmap("background.png");
Bitmap overlay = new Bitmap("colorWithAlpha.png");
float m = 0;
Color c;
for (int i = 0; i < bg.Width; i++)
{
    for (int j = 0; j < bg.Height; j++)
    {
        m = overlay.GetPixel(i, j).A / 255f;
        c = HSVtoRGB(overlay.GetPixel(i,j).GetHue(), overlay.GetPixel(i,j).GetSaturation(), bg.GetPixel(i, j).GetBrightness());
        c = Color.FromArgb((int)(m * c.R + (1 - m) * bg.GetPixel(i, j).R), (int)(m * c.G + (1 - m) * bg.GetPixel(i, j).G), (int)(m * c.B + (1 - m) * bg.GetPixel(i, j).B));
        bg.SetPixel(i, j, c);
    }
}

HSVtoRGB函数取自https://bytes.com/topic/c-sharp/answers/236124-how-would-i-change-hue-bitmap,略有调整,因为原始函数期望所有输入都是0-255的值,因此必须删除缩放。