2016-07-28 108 views
1

有一个非常简单的.jpg图像,我想转换为矩阵。但是使用getRGB(i,j)指向像素会给出ArrayIndexOutOfBounds的运行时异常。以下代码对图像大小有任何限制吗? 它只是显示在整个图像中获得的第一个颜色代码。java图像转换为矩阵

BufferedImage img=ImageIO.read(new File("stars.jpg")); 
int pix[][]= new int[img.getHeight()][img.getWidth()]; 

,然后我申请一个嵌套循环和使用

pix[i][j]= img.getRGB(i,j); 
+1

分享您的完整代码替换

int pix[][]= new int[img.getHeight()][img.getWidth()]; 

。我和j的价值如何变化?很可能你可能试图访问不存在的pxel值 –

回答

0

你可能换宽度高度

尝试

int pix[][]= new int[img.getWidth()][img.getHeight()]; // <--- width first 
1

这个函数你提到的正是它为我工作得很好。我相信你可能在你的嵌套for循环中做了错误的事情。

public int[][] getMatrixOfImage(BufferedImage bufferedImage) { 
    int width = bufferedImage.getWidth(null); 
    int height = bufferedImage.getHeight(null); 
    int[][] pixels = new int[width][height]; 
    for (int i = 0; i < width; i++) { 
     for (int j = 0; j < height; j++) { 
      pixels[i][j] = bufferedImage.getRGB(i, j); 
     } 
    } 

    return pixels; 
} 
0
import java.awt.Color; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 

public class ImageUtil { 

    public static Color[][] loadPixelsFromFile(File file) throws IOException { 

     BufferedImage image = ImageIO.read(file); 
     Color[][] colors = new Color[image.getWidth()][image.getHeight()]; 

     for (int x = 0; x < image.getWidth(); x++) { 
      for (int y = 0; y < image.getHeight(); y++) { 
       colors[x][y] = new Color(image.getRGB(x, y)); 
      } 
     } 

     return colors; 
    } 

    public static void main(String[] args) throws IOException { 
     Color[][] colors = loadPixelsFromFile(new File("stars.jpg")); 
     System.out.println("Color[0][0] = " + colors[0][0]); 
    } 
}