将 BufferedImage 的单列转换为新的 BufferedImage

问题描述 投票:0回答:1

我想获取一个 BufferedImage(在本例中为 3600x3600)并获取第一列像素并从中创建一个新的 BufferedImage(创建一个 1x3600 的图像),这是我的代码:

BufferedImage originalImage = ImageUtilities.readImageFile("C:/someImage.png");
int[] columnData = new int[originalImage.getHeight()];
originalImage.getRGB(0, 0, 1, originalImage.getHeight(), columnData, 0, 1);
BufferedImage columnImage = new BufferedImage(1, originalImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
WritableRaster raster = columnImage.getRaster();
raster.setPixels(0, 0, 1, originalImage.getHeight(), columnData);

但我不断收到以下异常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3600
    at java.awt.image.SinglePixelPackedSampleModel.setPixels(Unknown Source)
    at java.awt.image.WritableRaster.setPixels(Unknown Source)

有人可以告诉我我做错了什么吗?

java bufferedimage
1个回答
0
投票

您可以使用 Graphics 类来复制图像的某个区域。

这是一个例子。
我正在使用下面的图片。
https://apod.nasa.gov/apod/image/2309/STSCI-HST-abell370_1797x2000.jpg.

这是 drawImage 方法的 JavaDoc
图形#drawImage(Java SE 20 和 JDK 20)

BufferedImage image = ImageIO.read(new File("STSCI-HST-abell370_1797x2000.jpg"));
int w = 1, h = 2000;
BufferedImage cropped = new BufferedImage(w, h, image.getType());
Graphics g = cropped.createGraphics();;
g.drawImage(image, 0, 0, w, h, 0, 0, w, h, null);
g.dispose();
ImageIO.write(cropped, "jpg", new File("STSCI-HST-abell370_cropped.jpg"));
© www.soinside.com 2019 - 2024. All rights reserved.