0

我有一个30 x 40 像素的 .bmp文件,我想加载到inputData该文件中,声明如下:

byte[][] inputData = new byte[30][40];

我对编程比较陌生,所以任何人都可以告诉我应该使用哪些类来做到这一点?谢谢!

我不知道如何访问同一个包中的.bmp文件并将相应的(x, y)位置分配到我的 .bmp 文件中2-D byte array。到目前为止,我有以下内容:

for (int x = 0; x < inputData.length; x++)
{
    for (int y = 0; y < inputData[x].length; y++)
    {
        // inputData[x][y] =
    }
}
4

2 回答 2

0

您认为 1 个像素是 1 个字节,这是不正确的。RGB 像素已经是每像素 3 个字节。BMP文件也不是像素阵列,而是压缩图像。简单的加载到数组不会帮助你。最好使用一些现成的库。

看这里:

GIF http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter06/images.html

BMP http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

TGA http://www.java-tips.org/other-api-tips/jogl/loading-compressed-and-uncompressed-tgas-nehe-tutorial-jogl.html

于 2012-10-27T07:28:23.123 回答
0

您可以使用ImageIOJava 5+ 中的 将 BMP 文件读入BufferedImage. BufferedImage已经可以转换为int[]

在您的情况下,将绿色通道提取到字节数组中:

BufferedImage img = ImageIO.read(new File("example.bmp"));
// you should stop here
byte[][] green = new byte[30][40];
for(int x=0; x<30; x++){
  for(int y=0; y<40; y++){
     int color = img.getRGB(x,y);
     //alpha[x][y] = (byte)(color>>24);
     //red[x][y] = (byte)(color>>16);
     green[x][y] = (byte)(color>>8);
     //blue[x][y] = (byte)(color);
  }
}
byte[][] inputData = green;
于 2012-10-27T07:42:00.533 回答