gpt4 book ai didi

java - 在Java中将灰度转换为颜色渐变?

转载 作者:行者123 更新时间:2023-12-01 22:19:41 27 4
gpt4 key购买 nike

是否有任何通用算法或提供的类用于将灰度值(0-255)映射到颜色渐变中的值?我正在考虑类似的事情:

   public Color mapGrayscaleValue (byte value, Color[] gradientColors);

我希望这能够在我提供的灰度云覆盖雷达图像中提供更清晰的亮点。

最佳答案

如果您使用java.awt.image ,您应该查看 IndexColorModel 。 (我认为)它正是您所寻找的。

您需要以某种方式生成渐变的 256 个 RGB 值并围绕它们创建一个模型,然后您可以创建一个 BufferedImage使用新模型从灰度光栅中获取。

这是一个简单的例子:

index color model ex

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import java.net.*;

class ColorModelEx implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new ColorModelEx());
}

@Override
public void run() {
JFrame frame = new JFrame();
JLabel label;
try {
label = new JLabel(new ImageIcon(createImage(
Color.yellow, Color.red, Color.blue)));
} catch (Exception e) {
throw new AssertionError(e);
}

frame.add(label);
frame.pack();
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

static BufferedImage createImage(Color... colors) throws Exception {
if ((256 % (colors.length - 1)) != 0)
throw new IllegalArgumentException();

BufferedImage original =
ImageIO.read(new URL("/image/7bI1Y.jpg"));

final int w = original.getWidth();
final int h = original.getHeight();

BufferedImage gray =
new BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2 = gray.createGraphics();
g2.drawImage(original, 0, 0, null);

byte[] r = new byte[256];
byte[] g = new byte[256];
byte[] b = new byte[256];

final int fade = (256 / (colors.length - 1));

// (generate all 256 RGB values by
// fading between the colors supplied)
for (int i = 0; i < 256; ++i) {
Color c0 = colors[(i / fade)];
Color c1 = colors[(i / fade) + 1];

float amt = (i % fade) / ((float) fade);

r[i] = getChannel(amt, c0.getRed(), c1.getRed());
g[i] = getChannel(amt, c0.getGreen(), c1.getGreen());
b[i] = getChannel(amt, c0.getBlue(), c1.getBlue());
}

// (remap same pixels to new model)
return new BufferedImage(
new IndexColorModel(8, 256, r, g, b),
gray.getRaster(), false, null);
}

static byte getChannel(float amt, int ch0, int ch1) {
return (byte)
((ch0 * (1 - amt)) + (ch1 * amt));
}
}

(图片来自 here 。)

其他一些有用的地方:

关于java - 在Java中将灰度转换为颜色渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com