【问题标题】:Generating spectrum color palettes生成光谱调色板
【发布时间】:2010-09-18 10:44:20
【问题描述】:

有没有一种简单的方法可以在 Java 中的颜色模型(RGB、HSV 和 Lab)之间进行转换。

假设 RGB 颜色模型:

  • 如何计算黑体光谱调色板?我想将它用于热图。
  • 单波长光谱怎么样?

编辑:我发现ColorSpace 类可用于RGB/CIE 和许多其他颜色模型之间的转换。

【问题讨论】:

标签: java colors


【解决方案1】:

您可以使用 HSV 颜色模型构建这样的调色板。一旦您准备好 HSV 到 RGB 代码并使用这些数字玩几分钟,这很容易。

但是,我认为将代码添加到项目中只是为了生成一个小调色板是不值得的。

从文件中提取所需的调色板并将它们添加为静态数组更容易,工作量也更少。

Photoshop 让您可以编辑调色板,并附带一个非常漂亮的黑体调色板作为预设。

您可以简单地将这些保存为 .act 文件。该文件本身只是一个简单的 256 色 á 3 字节文件(顺序为读取,绿色,蓝色。每个通道 8 位)。

【讨论】:

    【解决方案2】:

    也许我不理解您的问题,但您无法真正从 RGB 输出设备生成真正的黑体光谱。如果没有别的,有限的色域将是一个问题。如果您想要的只是视觉上类似于黑体光谱的东西,那可能要容易得多。

    作为一个近似值,从 (R,G,B) (0,0,0) 到 (255,0,0),然后到 (255,255,0),然后到 (255,255,255)。这会给你从暗红色到橙色、到黄色、到白色的过渡。

    如果您想要更科学的东西,black body radiation 上的维基百科文章有一些颜色与温度的关系图。计算出 CIE 坐标后,您可以将其转换为您喜欢的色彩空间中的 RGB。

    编辑:找到其他一些在线参考资料: What color is the Sun? What color is a blackbody?

    【讨论】:

    • 对不起,我的意思是 BBS 在显示器色彩空间中的投影(用于热图的那种渐变)。链接很有趣。
    【解决方案3】:

    Java 具有内置的 RGB 到 HSB 转换功能。每当我需要 Java 中的快速调色板时,我都会这样做:

    public Color[] generateColors(int n)
    {
        Color[] cols = new Color[n];
        for(int i = 0; i < n; i++)
        {
            cols[i] = Color.getHSBColor((float) i / (float) n, 0.85f, 1.0f);
        }
        return cols;
    }
    

    这是一个快速而肮脏的 hack(我会为您的应用调整“神奇”数字),但对于我的简单用途,它会生成一个漂亮明亮宜人的托盘。

    【讨论】:

    • 2 年后,这对我也有帮助。谢谢。
    【解决方案4】:

    这是在 AS3 中制作 HSL 颜色方块的好方法。

    /**
     * Generate a BitmapData HSL color square (n x n) of hue
     * At a low n dimension you get cool blocky color palettes (e.g. try n=10)
     */
    function generateColorSquare(n:uint, hue:uint):BitmapData
                {
                    var bd:BitmapData = new BitmapData(n, n, false, 0xFFFFFF);
                    for (var i:uint=n*n; i > 0; i--)
                    {
                        bd.setPixel(i % n, Math.floor(i / n),  HSBColor.convertHSBtoRGB(hue, i / (n*n), (1/n) * (i % n) ));
                    }
                    return bd;
                }
    

    【讨论】:

      【解决方案5】:

      你可以生成这个色谱https://i.stack.imgur.com/ktLmt.jpg

      使用以下代码:

      public void render(Screen screen) {
          int green = 255;
          int red = 0;
      
          for (int i = 0; i <= 255 * 2; i++) {
              int rate = i / 255;
      
              screen.fillRect((x + (i * width)/6), y, width, height, new Color(red, green, 0));
      
              red += 1 - rate;
              green -= rate;
          }   
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-02
        • 1970-01-01
        • 2017-05-18
        • 2018-05-31
        • 2015-07-23
        • 2016-01-22
        • 1970-01-01
        • 2021-01-06
        • 2019-05-08
        相关资源
        最近更新 更多