转换 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