java - 在不使用 java.awt.Color 的情况下从 HSV(Java 中的 HSB)转换为 RGB(Google App Engine 不允许)

标签 java google-app-engine colors rgb hsv

我想我应该发布这个问题,即使我已经找到了解决方案,因为当我搜索它时 Java 实现并不容易获得。

使用 HSV 而不是 RGB 可以生成具有相同饱和度和亮度的颜色(这是我想要的)。

Google App Engine 不允许使用 java.awt.Color,所以执行以下操作在 HSV 和 RGB 之间转换不是一个选项:

Color c = Color.getHSBColor(hue, saturation, value);
String rgb = Integer.toHexString(c.getRGB());

编辑:我按照 Nick Johnson 的评论中的描述移动了我的答案。

Ex animo,- Alexander。

最佳答案

我对颜色数学一无所知,但我可以为代码提供这种替代结构,这让我很感兴趣,因为它让我明白 6 种情况中的每一种都是不同的值(value)排列, t和p。 (此外,我对长 if-else 链有一种非理性的恐惧。)

public static String hsvToRgb(float hue, float saturation, float value) {

    int h = (int)(hue * 6);
    float f = hue * 6 - h;
    float p = value * (1 - saturation);
    float q = value * (1 - f * saturation);
    float t = value * (1 - (1 - f) * saturation);

    switch (h) {
      case 0: return rgbToString(value, t, p);
      case 1: return rgbToString(q, value, p);
      case 2: return rgbToString(p, value, t);
      case 3: return rgbToString(p, q, value);
      case 4: return rgbToString(t, p, value);
      case 5: return rgbToString(value, p, q);
      default: throw new RuntimeException("Something went wrong when converting from HSV to RGB. Input was " + hue + ", " + saturation + ", " + value);
    }
}

public static String rgbToString(float r, float g, float b) {
    String rs = Integer.toHexString((int)(r * 256));
    String gs = Integer.toHexString((int)(g * 256));
    String bs = Integer.toHexString((int)(b * 256));
    return rs + gs + bs;
}

关于java - 在不使用 java.awt.Color 的情况下从 HSV(Java 中的 HSB)转换为 RGB(Google App Engine 不允许),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7896280/

相关文章:

java - com.fasterxml.jackson.databind.JsonMappingException : No content to map due to end-of-input

java - 针对仅使用一次的值优化变量的使用

google-app-engine - gcloud app deploy error The "vpcaccess.connectors.use"permission is required

algorithm - 白平衡(色彩抑制)公式?

java - 为什么我的 Java 代码不获取 JTextfield 的值?

google-app-engine - 您可以在 App Engine 上传递给 memcache.get_multi 的 key 数量的实际限制是多少?

google-app-engine - 应用程序如何知道是否可以在 App Engine 中向用户发送 XMPP 消息?

Javascript 背景改变颜色

c++ - 使用 SDL 使用 SDL Color Keys 替换颜色

java - java中重写匿名类的方法