C# 我如何混合像这样的颜色?

C# 我如何混合像这样的颜色?,c#,colors,blending,mixing,C#,Colors,Blending,Mixing,我正在写一个工具来帮助在游戏《十字军国王II》中塑造新角色,我对染发和胡须有点着迷 游戏以如下纹理开始: (来源:) 然后将其与三种颜色混合-阴影、底色和高光,例如: 黑暗:10,10,10 基数:125、85、56 突出显示:255、255、255 其结果是: (来源:) 它使用哪种混合?我该如何用C#来做呢?决定将此作为一个完整的答案,因为这里更容易格式化和提供示例 我猜它是在执行颜色倍增,根据像素的整体强度,选择三种颜色中的哪一种将像素倍增,可能在三种颜色之间使用线性插值。除非知道

我正在写一个工具来帮助在游戏《十字军国王II》中塑造新角色,我对染发和胡须有点着迷

游戏以如下纹理开始:


(来源:)

然后将其与三种颜色混合-阴影、底色和高光,例如:

  • 黑暗:10,10,10
  • 基数:125、85、56
  • 突出显示:255、255、255
其结果是:


(来源:)


它使用哪种混合?我该如何用C#来做呢?

决定将此作为一个完整的答案,因为这里更容易格式化和提供示例


我猜它是在执行颜色倍增,根据像素的整体强度,选择三种颜色中的哪一种将像素倍增,可能在三种颜色之间使用线性插值。除非知道构成乘法的暗像素、基像素或高光像素的阈值,否则很难正确复制

所以我假设他们的算法是:

(pixel(x,y).color * dark.color * THRESHDARK - min(pixel(x,y).intensity, THRESHDARK) //dark blending + 
(pixel(x,y).color * base.color * (pixel(x,y).intensity - THRESHDARK) / (THRESHLIGHT-THRESHDARK)) //middle blending +
(pixel(x,y).color * highlight.color * pixel(x,y).intensity - THRESHLIGHT) //light blending

或者类似的东西。希望这能有所帮助。

我猜这是在执行颜色倍增,根据像素的整体强度选择要将像素倍增的三种颜色中的哪一种,可能在三种颜色之间使用线性插值。除非你知道构成乘法的暗像素、基像素或高光像素的阈值,否则你将很难正确地复制它。如果乘法与Photoshop的操作类似,那么它将比游戏的最终结果更暗。还有,这个例子中的像素强度是多少?我试着在程序中实现它,但不知道它是什么。对不起,这只是一个大概的猜测。正如我所说的,由于权重等原因,很难完美地再现它们的值,但你可能会通过尝试和错误来接近它们。在该示例中,通过平均该像素处的r、g和b分量的值来计算像素的强度。有一些更好的方法获得像素强度,因为眼睛以不同的方式拾取光线,但简单的平均值是一个好的开始