持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
pygame 缩放颜色
要使颜色变暗,只需将每个分量乘以 0 到 1 之间的值即可。如果你拿火球橙(221,99,20)并将每个分量乘以0.5(换句话说,将它们减少一半),那么你得到(110.5,49.5,10)。但是由于颜色分量是整数,我们需要删除小数部分才能得到(110,49,10)。如果您使用清单 4-2 来创建这种颜色,您应该看到它确实是火球橙色的较深阴影。我们不想每次都要在脑海中做数学运算,所以让我们写一个函数来为我们做这件事。清单 4-3 是一个函数,它采用一个颜色元组,将每个数字乘以一个浮点值,然后返回一个新元组。
如果运行清单 4-3,它将显示火球橙色和深色版本的颜色元组:
将每个分量乘以 0 到 1 之间的值会使颜色变暗,但如果乘以大于 1 的值会怎样?它会使颜色更亮,但有些事情你必须注意。让我们使用比例值 2 来制作一个非常明亮的火球橙色。将以下行添加到清单 4-3 中,看看颜色发生了什么变化:
这将向输出添加一个额外的颜色元组:
(442、198、40)
第一个(红色)分量是442 - 这是一个问题,因为颜色分量必须是0到255之间的值!如果你在Pygame中使用此颜色元组,它将抛出一个
TypeError异常,因此在使用它来绘制任何内容之前,我们必须“修复”它。我们所能做的就是检查每个组件,如果它超过255,请将其设置回255 - 一个称为饱和颜色的过程。清单 4-4 是执行颜色饱和度的函数。
清单 4-4.饱和色彩定义saturate_color(彩色)的功能:
清单 4-4 使用内置函数 min,它返回两个值中的较低者。如果组件在正确的范围内,则返回该组件不变。但是,如果它大于 255,它将返回 255(这正是我们需要的效果)。
如果我们在缩放后使超亮的火球橙色饱和,我们将得到以下输出,Pygame将很乐意接受:
(255, 198, 40)
当颜色分量饱和度为255时,颜色会更亮,但色调可能不完全相同。如果你继续缩放颜色,它最终可能会变成(255,255,255),这是明亮的白色。通常,最好选择所需颜色的最亮阴影并将其向下缩放(使用小于 1 的因子)。
我们现在知道了在使用大于零的值时缩放的作用。但是,如果它小于零(即负数)呢?缩放颜色时使用负值
产生负色分量,这没有意义,因为一种颜色不能少于零个红色、绿色或蓝色。避免按负值缩放颜色!