【问题标题】:Special Color Blend Mode to Tint Image特殊颜色混合模式为图像着色
【发布时间】:2011-11-14 07:10:31
【问题描述】:

我正在尝试为图像着色。但这次是一个更棘手的变体。

  • 图像有 saturationbrightnessalpha 信息(遗憾的是 RGBA),应该丢弃这些信息(黑色阴影的饱和度)。

  • tint 颜色有huesaturationbrightnessalpha 信息(遗憾的是也是RGBA),也不应该被丢弃。

  • 正如我想象的那样,每个 HSBA 组件(除了色调)都应该相乘以完全控制着色图像 - 例如当我提供不太亮的色调时,图像亮度也应该按比例缩小。

所以,类似:

(h,s,b,a) = (h_tint, s_tint*s_image, b_tint*b_image, a_tint*a_image)

我搜索了互联网,但这个过程似乎并不常见,即使暂时忽略了 alpha 通道(甚至也忽略了饱和度)。

我在 iOS 中需要它,但我什至在 Photoshop 中都没有找到这样的图层混合模式。我已经尝试过(在 iOS 中,如果存在于 Photoshop 中):

  • Multiply - 一点也不像我想要的
  • Darken - 不是真的
  • Color Dodge - 至少有点用,但不是很正确
  • Plus Darker - 也可以,但不是真的
  • Color / Luminosity / Hue - 这些本来是我的最爱,但它们丢弃了色调的饱和度和亮度值,而不是相乘。但也许有办法在之后应用缺失的饱和度和亮度?

那么,所描述的混合模式是否有一个通用名称/是否有意义?

关于如何在 iOS 中执行此操作的任何想法?(我知道 Apple Developer GuideReference,以及 stackoverflow 问题 about tintingoverlaying

【问题讨论】:

  • 好的,我可能会选择Luminosity/Color,因为它产生的工作量最少,结果也可以接受。对于想要的较深颜色,结果仍然太亮。
  • 顺便说一句,我了解到 Luminosity != Brightness (HSB) != Lightness (HSL)

标签: image graphics image-processing colors uiimage


【解决方案1】:

您可以创建一个 CGBitmapContextRef,它由您控制的数据支持,采用已知格式。然后,您可以将图像绘制到该上下文中。现在您有了已知格式的图像数据。您现在可以对像素进行任何您喜欢的数学运算。处理完像素后,您可以从 CGContextRef 创建一个 CGImageRef。

数学由你决定。

【讨论】:

  • 所以这种方法不常用?
  • @fabb:我真的不知道,我在图形编程方面做得不多。但是您指出您想要的内容与 CoreGraphics 提供的任何混合模式都不匹配,因此您唯一真正的选择是处理像素数据。
猜你喜欢
  • 2016-01-24
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
相关资源
最近更新 更多