K
Klaus_laust
Gast
Hallo Zusammen,
ich beschäftige mich seit kurzem mit Bildverarbeitung in Java und bin jetzt an dem Punkt, wo ich die Pixel eines Bildes einlesen möchte.
Im Forum habe ich auch einige gute Quellen gefunden. Ich schaffe es leider nicht sie anzuwenden, weil ich eine Exception geworfen bekomme(Variante 1). Der Fehler ist zwar verständlicher Cast Problem, aber ich habe keine Idee, was man da tun müsste um ihn zu beheben.
In der Zeile 15 und 21 wird die Exception geworfen
Version 2-3 funktionieren, aber ich glaube das die erste Variante perfomanter ist. Kennt sich jemand damit aus?
Quellen:
http://www.java-forum.org/allgemeine-java-themen/39438-effizienteste-pixel-java-welt.html
http://www.java-forum.org/awt-swing-swt/123479-int-bufferedimage-konvertieren.html
ich beschäftige mich seit kurzem mit Bildverarbeitung in Java und bin jetzt an dem Punkt, wo ich die Pixel eines Bildes einlesen möchte.
Im Forum habe ich auch einige gute Quellen gefunden. Ich schaffe es leider nicht sie anzuwenden, weil ich eine Exception geworfen bekomme(Variante 1). Der Fehler ist zwar verständlicher Cast Problem, aber ich habe keine Idee, was man da tun müsste um ihn zu beheben.
In der Zeile 15 und 21 wird die Exception geworfen
Version 2-3 funktionieren, aber ich glaube das die erste Variante perfomanter ist. Kennt sich jemand damit aus?
Java:
public void readImage(String url){
File imageFile=new File(url);
try {
BufferedImage image=ImageIO.read(imageFile);
if(image == null){
System.out.println("Fehler beim Lesen");
}
String imageTitle = imageFile.getAbsolutePath();
//Version1, die nicht funktioniert
int[]pixels0 = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
for (int i : pixels0) {
System.out.println(i);
}
//ausgelagerte Methode von Version1
int [] pixels1= getDataArray(image);
for (int i : pixels1) {
System.out.println(i);
}
//Version 2(funktioniert)
/*int[]array=null;
int[]pixels = image.getRaster().getPixels(0, 0, image.getWidth(), image.getHeight(),array);
*/
//Version 3(funktioniert)
/*ByteArrayOutputStream byar = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", byar);
byte[] pixel3=byar.toByteArray();
for (byte b : pixel3) {
System.out.println(b);
}*/
// System.out.println("ArrayLaenge "+ pixels.length);
//
// int i = image.getWidth() * image.getHeight();
// System.out.printf("\nBildgröße: " +i);
} catch (IOException e) {
System.out.println("Datei nicht gefunden");
}
}
private static int[] getDataArray(BufferedImage image)
{
Raster raster = image.getRaster();
DataBuffer dataBuffer = raster.getDataBuffer();
if (!(dataBuffer instanceof DataBufferInt))
{
throw new IllegalArgumentException(
"Image does not have a DataBufferInt");
}
DataBufferInt dataBufferInt = (DataBufferInt)dataBuffer;
int data[] = dataBufferInt.getData();
return data;
}
Java:
Exception in thread "main" java.lang.ClassCastException: java.awt.image.DataBufferByte cannot be cast to java.awt.image.DataBufferInt
at model.ImageViewer.readImage(ImageViewer.java:67)
at main.Main.main(Main.java:36)
Quellen:
http://www.java-forum.org/allgemeine-java-themen/39438-effizienteste-pixel-java-welt.html
http://www.java-forum.org/awt-swing-swt/123479-int-bufferedimage-konvertieren.html