2016-07-28 14 views
1

Es gibt ein sehr einfaches .jpg Bild, das ich in eine Matrix konvertieren möchte. Die Verwendung von getRGB (i, j) für das Zeigen auf Pixel führt jedoch zu einer Laufzeitausnahme von ArrayIndexOutOfBounds. Gibt es Einschränkungen für die Größe des Bildes für den folgenden Code? Und es zeigt nur den ersten Farbcode an, den es für das ganze Bild bekommt.Java-Bild-Konvertierung in eine Matrix

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

und dann wendete ich eine verschachtelte for-Schleife und verwendet

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

Teilen Sie Ihre vollständigen Code zu ersetzen. Wie variieren die Werte von i und j? Höchstwahrscheinlich versuchen Sie, auf nicht existierende pxel-Werte zuzugreifen –

Antwort

0

Sie wahrscheinlich Breite und Höhe getauscht.

Try

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

mit

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

Diese Funktion ist genau das, was Sie erwähnt und es funktioniert gut für mich. Ich glaube, Sie haben in Ihrer verschachtelten for-Schleife möglicherweise etwas falsch gemacht.

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]); 
    } 
}