我正在尝试模拟 Open XML 的色调效果。它所做的是通过改变色调来改变图像中像素的色调。它需要 2 个参数:1)hue
(以度为单位)和 2)amt
(数量,百分比)。我遇到的问题是#2。该规范指出:
Tint:将效果颜色值移向或远离色调指定的量。
- amt (Amount) - 指定颜色值的偏移量。
- 色调(Hue) - 指定要着色的色调。
不用管 XML 构造,我可以模拟amt
100% 的值。例如,如果我想要蓝色(色调:240°),我可以创建这个(有色的)。这是一个例子:
原始和着色(色调 = 240,数量 = 100%)。
这可以通过将色调设置为 240、保持饱和度和亮度相同并转换为 RGB 并写入每个像素来实现。
这是我无法实现的目标:
色调 = 240(蓝色),数量 = 30%、50%和80%,分别
同样,规范Amount
说指定颜色值的偏移量。我在这里尝试了各种方法来让它工作,但似乎无法(hue=hue*amount
,,originalhue * amount + hue
等)
更多示例:Hue= 120 ( green ), Amount = 30% , 50% , 80%和100%。我能得到的100% 。
以下是上图中单个像素的一些值列表:
像素 159、116 - 蓝色图片
色相量 RGB | HSL 原始 244 196 10 | 48 0.92 0.5 蓝色 240 30% 237 30 45 | 356 0.85 0.52 蓝色 240 50% 245 9 156 | 323 0.93 0.5 蓝色 240 80% 140 12 244 | 273 0.91 0.5 蓝色 240 100% 12 12 244 | 240 0.91 0.5
像素 159、116 - 绿色图片
色相量 RGB | HSL 原始 244 196 10 | 48 0.92 0.5 绿色 120 30% 211 237 30 | 68 0.85 0.52 绿色 120 50% 159 237 30 | 83 0.85 0.52 绿色 120 80% 81 237 29 | 105 0.85 0.52 绿色 120 100% 29 237 29 | 120 0.85 0.52
所以,问题是:有谁知道这应该如何工作?
注意:这不是以下内容的重复:
- 在保持整体亮度的同时更改位图的色调
- 在 C# 中使用 ImageAttributes 旋转色调
- ...或者我可以在 SO 上找到的任何其他内容