我正在屏幕上绘制一些按钮。每个都有不同的颜色,但形状相同,在 Photoshop 中设计,具有各种反射和光泽。
我想使用形状的单个位图并以编程方式更改其颜色,保留所有反射和阴影。这就是我现在所做的:
- 将形状转换为 ARRGB_8888 位图(即使所有颜色都是灰色阴影)
- 将位图像素复制到 3 个缓冲区:图像、高光、阴影
- 参考灰度为 RGB[128,128,128]
- 在 Highlights 缓冲区中,将参考以下的所有像素归零(+ 阈值)
- 在阴影缓冲区中,将参考上方的所有像素归零(- 阈值)
从高光和阴影缓冲区创建高光和阴影位图
使用
PorterDuffColorFilter
开启模式 MULTIPLY绘制原始灰度图像- 使用阴影位图和 XferMode DARKEN 在阴影上绘制
- 使用 Highlights 位图和 XferMode LIGHTEN 在高光上绘制
我确实得到了结果,但我意识到最终的按钮颜色不是目标颜色,而是更暗的阴影,因为参考 128 的 MULTIPLY 模式将所有组件减半。
我尝试将参考设置为更白的灰色阴影,但随后高光变得饱和。
我尝试在上面的第 7 步中使用 SRC_IN,我只在既不是高光也不是阴影的区域获得目标颜色。
查看结果:
不知道我需要问什么,但我想获得具有确切目标颜色及其高光和阴影的按钮。也许我生成了错误的高光和阴影蒙版,或者我使用了错误的混合模式。或者也许是别的东西。