gpt4 book ai didi

java - 将灰度位图转换为二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:53 26 4
gpt4 key购买 nike

大家好,我在 Java 中将灰度 bmp 图像转换为整数 2D 数组(值 0-255)时遇到问题。

我有一个 pmb 图像,可以将其视为整数 (0-255) 2D 数组,并且我想在 Java 数据结构中查看该 2D 数组

我尝试过这种方法:

Image image = ImageIO.read(new File("my_img.bmp"));
BufferedImage img = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_BYTE_GRAY);
Graphics g = img.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();

然后用我的 BufferedImage 创建 int[][] 这样:

int w = img.getWidth();
int h = img.getHeight();

int[][] array = new int[w][h];
for (int j = 0; j < w; j++) {
for (int k = 0; k < h; k++) {
array[j][k] = img.getRGB(j, k);
}
}

但是现在所有的二维数组都充满了像“-9211021”或类似的数字。

我认为问题出在 getRGB(j,k) 中,但我不知道是否可以解决它。

编辑:

我知道RGB不是灰度,那么如何从灰度BufferedImage中获取单个像素的灰度值?

最佳答案

在灰度图像中,BufferedImage.getPixel(x,y) 不会给出 [0-255] 范围内的值。相反,它返回 RGB 颜色空间中灰度级(强度)的相应值。这就是为什么您会得到类似 "-9211021" 的值。

以下代码片段应该可以解决您的问题:

Raster raster = image.getData();
for (int j = 0; j < w; j++) {
for (int k = 0; k < h; k++) {
array[j][k] = raster.getSample(j, k, 0);
}
}

其中image是创建的BufferedImage。 getSample 中的 0 表示我们正在访问第一个字节/带(将其设置为更大的值将在灰度图像中抛出 ArrayOutOfBoundException )。

关于java - 将灰度位图转换为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17278829/

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