gpt4 book ai didi

java - 在java中显示来自二维数组数据的图像

转载 作者:搜寻专家 更新时间:2023-10-31 20:15:15 24 4
gpt4 key购买 nike

我有一些数据是从与我的图像文件相对应的文本文件中加载的。此数据现在位于二维数组中。我想展示这张图片。显然图像显示格式为 bufferedimage。但我的只是简单的二维 double 格式。还有怎么可能调整图像的大小,意思是让它变大两倍(当然需要在两者之间进行插值)

换句话说,我们如何在 Java 中执行“imshow”和“imresize”等价的 Matlab?

最佳答案

在 Java 中,没有简单的方法可以将基于数组的强度矩阵转换为可渲染图像,至少我不知道。也没有任何简单的一行方法可以在屏幕上显示图像等。

但是,在这种情况下,BufferedImage 是一个可行的解决方案是正确的。您需要做的是创建所需大小的 BufferedImage,然后遍历 2D 强度矩阵并在生成的图像中填充颜色。

一旦您拥有 BufferedImage 形式的数据,您就可以直接使用它进行渲染。例如,您可以创建一个带有自定义 JPanel 组件的 JFrame 来显示图像。以下示例代码说明了该过程:(请注意,这假设您的二维数组中的图像数据已缩放以适合区间 [0,1]。如果不是,则必须在填充之前重新缩放在 BufferedImage 中。)

public class ImageTest {

private static final int HEIGHT = 250;
private static final int WIDTH = 250;

public static void main(String[] args) {
double[][] data = new double[WIDTH][HEIGHT];
Random r = new Random();
for(int i = 0; i < WIDTH; i++) {
for(int j = 0; j < HEIGHT; j++) {
data[i][j] = r.nextDouble();
}
}

final BufferedImage img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D)img.getGraphics();
for(int i = 0; i < WIDTH; i++) {
for(int j = 0; j < HEIGHT; j++) {
float c = (float) data[i][j];
g.setColor(new Color(c, c, c));
g.fillRect(i, j, 1, 1);
data[i][j] = r.nextDouble();
}
}

JFrame frame = new JFrame("Image test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.clearRect(0, 0, getWidth(), getHeight());
g2d.setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
// Or _BICUBIC
g2d.scale(2, 2);
g2d.drawImage(img, 0, 0, this);
}
};
panel.setPreferredSize(new Dimension(WIDTH*2, HEIGHT*2));
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}

如果您对在生成的输出图像中调整大小和插值感到满意,那么您可以通过简单地缩放图形上下文并在其上启用插值渲染提示来实现它,如上例显示/渲染图像时所示。 (这当然可以直接在 BufferedImage 中以类似的方式完成。

关于java - 在java中显示来自二维数组数据的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7913133/

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