如何从给定的基色生成多个阴影?

Posted

技术标签:

【中文标题】如何从给定的基色生成多个阴影?【英文标题】:How can I generate multiple shades from a given base color? 【发布时间】:2011-04-09 00:08:43 【问题描述】:

我想设计一个图表并设置颜色 从一个单一的样本。与 Excel 中的方法相同:

是否有某种公式或算法 从给定的颜色生成下一个颜色 阴影还是颜色?

【问题讨论】:

【参考方案1】:

在我看来,它们只是采用相同的色调(基本颜色)并上下调节亮度。这可以通过 HSL 或 HSV 转换轻松完成。查看 Wikipedia 以了解 HSL 和 HSV 颜色空间,以了解所涉及的理论。

基本思想:计算机用红色强度、绿色强度和蓝色强度的混合来表示颜色,称为 RGB,因为这是屏幕显示颜色的方式。 HSL(色相、饱和度、亮度)和 HSV(色相、饱和度、值)是表示颜色的两种替代模型,它们更直观,更接近人类对颜色外观的看法。

色调是基本颜色,(或多或少)表示为色轮上的一个角度。饱和度是一个线性值,从 0(灰色)到 255(明亮、鲜艳的颜色)。 Lightness/Value 表示亮度,从 0(黑色)到 100(白色)。

从 RGB -> HSL 和 HSL -> RGB(或 HSV 代替 HSL)转换的算法非常简单。尝试将颜色转换为 HS*,调整亮度,然后转换回来。通过从低到高获取几个不同的亮度值,并将它们排列为饼图中的楔形,您可以很容易地复制该图片。

【讨论】:

感谢 Mason,正如您所建议的,我保持 HS 不变并使 L 变化。我得到了我想要的结果。也感谢 mghie 的链接。我使用 efg 的算法将 hsv 转换为 rgb。 很好的答案。另外,检查 VCL 中的 GraphUtil 单元:ColorAdjustLuma 和其他函数。 迟来的评论。但是 ColorRecHelper 让它变得微不足道!【参考方案2】:

查看HSV colour space。使用它,您可以从给定的颜色开始产生不同的色调或色调。在efg's Computer Lab 有一个包含 Pascal / Delphi 代码的页面,用于在 RGB 和 HSV 之间进行转换。

【讨论】:

【参考方案3】:

Roderick ,@mghie 链接非常适合开始,另外尝试 Colorlib Delphi 库,它可以让您在颜色模型以及 html 颜色转换实用程序之间进行转换。非常完整,包含完整的源代码和免费软件;)。

查看演示application,在这张图片中你可以看到一个使用这个库生成的蓝色调色板。

【讨论】:

以上是关于如何从给定的基色生成多个阴影?的主要内容,如果未能解决你的问题,请参考以下文章

从一组十六进制颜色中获取基色

如何在 OpenGL 中使用立方体贴图数组来渲染带有阴影贴图的多个点光源?

UIView iOS Swift下的多个阴影

Core Graphics 中的内部阴影

SQL如何从给定郊区5KM范围内的给定多个郊区中选择属性?

如何从存储库索引中删除具有给定模式的多个文件夹?