代码之家  ›  专栏  ›  技术社区  ›  Ashish

根据当前主题对图像重新着色?

  •  0
  • Ashish  · 技术社区  · 15 年前

    我想开发一个程序,根据给定的主题对输入图像重新着色,就像微软的PowerPoint应用程序一样。

    我给出了下面的链接,显示了我到底想做什么。

    我想生成与下面链接中的图像相同的图像 暗变化 S和 光线变化 基于当前主题的标题。

    http://blogs.msdn.com/powerpoint/archive/2006/07/06/658238.aspx

    有人能告诉我如何有效地实现它的想法和信息吗??

    4 回复  |  直到 15 年前
        1
  •  2
  •   Patrice Bernassola    15 年前

    你可以看看 HSL colorspace 能够得到同样的结果。hsl表示色调、饱和度、亮度。

    您可以保持图像中每个像素的亮度,只更改色调。我认为这会让你实现你想要的。您可以在wiki页面上找到从rgb到hsl的转换。

    希望有帮助。

        2
  •  2
  •   Mark Ransom    15 年前

    第1步:选择要表示黑白的颜色。对于深色变化,选择黑色和浅色;对于浅色变化,选择深色和白色。

    步骤2:将像素转换为灰色。常用的公式是l=r*0.3+g*0.59+b*0.11。

    步骤3:使用灰色值在颜色之间插入。 output.R = (L/255)*light.R + (1-(L/255))*dark.R 绿色和蓝色也一样。

        3
  •  1
  •   Jay Kramer    15 年前

    您可以使用库(如cximage)并将图像转换为灰度,然后将mix命令与另一个与原始图像大小相同的图像一起使用,并使用过滤器将这两个图像与mix命令混合。您可以混合使用屏幕,这应该使像素与合成图像中第二个图像的颜色着色。尝试使用cximage一点,看看它是否会做你想做的。这一切都是从我的头上冒出来的,我已经有一段时间没做过这样的事了。但这将是最简单的实现。您可以随时查看cximage如何进行混合,并自己将其应用于图像。

        4
  •  0
  •   Ashish    15 年前

    我要感谢马克和帕特里斯的指导,帮助我实现了这一目标。

    对于光的变化,我通过将主题颜色转换为hsv颜色空间来实现,并找到输出颜色和黑色主题颜色(输入)之间的关系。

    结果表明,该关系对饱和度和值是线性的,色调几乎不变。

    我已经使用插值公式使它对任何给定的主题通用。 我也利用了颜色矩阵来达到想要的效果。

    同样,对于暗变化,我使用了白色作为输入,并应用了相同的技术。