【问题标题】:Gradient color lookup in JavaJava中的渐变颜色查找
【发布时间】:2010-12-12 20:35:57
【问题描述】:

我有一个从 0 到 1 的值列表。我想通过使用将这些浮点值转换为 RGB 值的渐变将此列表转换为图像。 Java 中是否有任何工具可以为您提供此功能?

【问题讨论】:

    标签: java image-processing gradient


    【解决方案1】:

    0 应该映射为 0
    1 应该映射到 255

    请记住,您需要其中 3 个来制作颜色

    所以将浮点数乘以 255 并将其转换为 int。

    【讨论】:

    • 这仅用于转换为 RGB Photoshop 类似的值,对于渐变 Laurence 建议了一个不错的工具,您可能不需要进行 RGB 转换
    【解决方案2】:

    也许GradientPaint 可以为所欲为。目前尚不清楚您希望如何将浮点值列表转换为渐变。通常,渐变由两种颜色和一些在这些颜色之间插值的机制组成。 GradientPaint 实现了线性渐变。

    【讨论】:

      【解决方案3】:

      假设您有一个由 64 000 个三元组组成的数组,对应于 RGB 值,如下所示:

          final Random rand = new Random();
          final float[] f = new float[320*200*3];
          for (int i = 0; i < f.length; i++) {
              f[i] = rand.nextFloat(); // <-- generates a float between [0...1.0[
          }
      

      假设您有一个大小为 320x200(64 000 像素)的 INT_ARGB 类型的 BufferedImage(每个值 8 位 + alpha 级别 8 位):

          final BufferedImage bi = new BufferedImage( 320, 200, BufferedImage.TYPE_INT_ARGB );
      

      然后您可以将浮点数组转换为 RGB 值并填充图像:

          for (int x = 0; x < 320; x++) {
              for (int y = 0; y < 200; y++) {
                  final int r = (int) (f[x+y*200*3] * 255.0);
                  final int g = (int) (f[x+y*200*3+1] * 255.0);
                  final int b = (int) (f[x+y*200*3+2] * 255.0);
                  bi.setRGB( x, y, 0xFF000000 | (r << 16) | (g << 8) | b );
              }
          }
      

      请注意,如果您显示此图像,它会显示为灰色,但如果您放大它,您会发现它实际上是由完全随机的彩色像素组成的。只是随机数生成器太好了,屏幕上看起来都是灰色的:)

      【讨论】:

        猜你喜欢
        • 2020-06-09
        • 1970-01-01
        • 2014-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 2011-03-06
        相关资源
        最近更新 更多