libgdx - 如何在 libgdx 中指定具有色调、饱和度和亮度的颜色

标签 libgdx

如何在 libGDX 中指定具有色调、饱和度和亮度的颜色,而不是 r、g、b、a 值。我注意到 Color 构造函数只接受 rgba,至少自动完成只提供 rgba。这可能吗?我想创建一个从 hue=0 到 hue=255 的渐变。

最佳答案

我不认为这是内置在 Libgdx 中的,除非自从我上次检查后它被添加了。我为它做了一个实用方法。这将色调、饱和度和值视为从 0 到 1 的值。(如果这是您使用的比例,那么预先除以 255)。对于色相,它从红色到黄色到绿色到青色到蓝色到洋红色再回到红色。或者也许在相反的方向,忘记了。我从 Android 的颜色类中改编了算法。

public static Color setColor (Color target, float hue, float saturation, float value){
        saturation = MathUtils.clamp(saturation, 0.0f, 1.0f);
        hue %= 1f;
        if (hue < 0f) {
            hue++;
        }
        value = MathUtils.clamp(value, 0.0f, 1.0f);

        float red = 0.0f;
        float green = 0.0f;
        float blue = 0.0f;

        final float hf = (hue - (int) hue) * 6.0f;
        final int ihf = (int) hf;
        final float f = hf - ihf;
        final float pv = value * (1.0f - saturation);
        final float qv = value * (1.0f - saturation * f);
        final float tv = value * (1.0f - saturation * (1.0f - f));

        switch (ihf) {
            case 0:         // Red is the dominant color
                red = value;
                green = tv;
                blue = pv;
                break;
            case 1:         // Green is the dominant color
                red = qv;
                green = value;
                blue = pv;
                break;
            case 2:
                red = pv;
                green = value;
                blue = tv;
                break;
            case 3:         // Blue is the dominant color
                red = pv;
                green = qv;
                blue = value;
                break;
            case 4:
                red = tv;
                green = pv;
                blue = value;
                break;
            case 5:         // Red is the dominant color
                red = value;
                green = pv;
                blue = qv;
                break;
        }

        return target.set(red, green, blue, target.a);
    }

关于libgdx - 如何在 libgdx 中指定具有色调、饱和度和亮度的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441749/

相关文章:

java - libgdx的gradlew在Fedora中不起作用

android - LibGDX 中的 deWiTTERS 游戏循环

java - Scene2d 图像无法缩放

java - 如何在 libgdx 中交换 actor

java - LibGDX FrameBuffer 到TextureRegion 正在渲染不正确的 Sprite

java - LibGDX:仅在特定区域内显示 Sprite

java - 在 Libgdx 中,如何获取图像旋转时的 x、y 坐标?

opengl - Libgdx - 支持 OpenGL 4+

java - libgdx:SpriteBatch 不与 PerspectiveCamera 一起显示

java - Libgdx:阶段与批处理混淆