转换 Scratch 颜色
Converting Scratch colours
Scratch 似乎在使用自己专门的颜色格式:
有没有办法获得这些值的 HEX 等价物,是否有可能以其他方式工作?
Scratch 的颜色格式 CSB 使用类似于 HSV(色调、饱和度、值)的格式,但有一些变化。
- 色调 (0-360) 变为颜色 (0-100),其值按比例缩小 3.6 倍,因此 36 色调变为 10 颜色。
- 数值变为亮度不变
CSB 和 HSV 之间的转换可以像这样完成:
// Convert from HSV TO CSB
const [colour, saturation, brightness] = [Math.round(hue / 360 * 100), saturation, value]
// Convert from CSB to HSV
const [hue, saturation, value] = [Math.round(colour / 100 * 360), saturation, brightness]
存在 Math.round
函数以防色调值不能完全整除。但是,这在使用 块时可能会造成问题。由于您只能指定从 0 到 100 的颜色值,因此除以十进制数的色调不起作用。当使用来自图像的自定义精灵时,这可能是一个问题。
为了解决这个问题,我们可以对颜色进行量化,以便它可以在格式之间转换,而无需处理小数。为此,我们可以 round it to the nearest multiple of 18:
const compatibleHue = Math.round(hue / 18) * 18
Scratch 似乎在使用自己专门的颜色格式:
有没有办法获得这些值的 HEX 等价物,是否有可能以其他方式工作?
Scratch 的颜色格式 CSB 使用类似于 HSV(色调、饱和度、值)的格式,但有一些变化。
- 色调 (0-360) 变为颜色 (0-100),其值按比例缩小 3.6 倍,因此 36 色调变为 10 颜色。
- 数值变为亮度不变
CSB 和 HSV 之间的转换可以像这样完成:
// Convert from HSV TO CSB
const [colour, saturation, brightness] = [Math.round(hue / 360 * 100), saturation, value]
// Convert from CSB to HSV
const [hue, saturation, value] = [Math.round(colour / 100 * 360), saturation, brightness]
存在 Math.round
函数以防色调值不能完全整除。但是,这在使用
为了解决这个问题,我们可以对颜色进行量化,以便它可以在格式之间转换,而无需处理小数。为此,我们可以 round it to the nearest multiple of 18:
const compatibleHue = Math.round(hue / 18) * 18