Bild in Array einlesen

Status
Nicht offen für weitere Antworten.

Juscho

Mitglied
Hi!

ich bin dabei ein programm zu schreiben, wasd 2 Bilder vergleichen soll pixel für pixel, dafür muss ich das bild in ein int-array überführen und habe PixelGrabber verwendet, leider treten fehler dabei auf


-1
Uncaught error fetching image:
java.lang.ArrayIndexOutOfBoundsException: 1
at java.awt.image.PixelGrabber.setPixels(PixelGrabber.java:595)
at sun.awt.image.ImageDecoder.setPixels(ImageDecoder.java:120)-267552
at sun.awt.image.JPEGImageDecoder.sendPixels(JPEGImageDecoder.java:97)
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119
)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.j
ava:246)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
Code:
import java.applet.Applet;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;

public class FuMain extends Applet {

	protected Image bildeins, bildzwein, bildkopie, bildkopiezwei;	
	protected Button click = new Button("Vergleich");
	protected int Count=0, width1, hoehe1, width2, hoehe2;
	protected String bildpfad1;
	protected String bildpfad2;


public void init() {
	click.addActionListener(new ButtonListener()); //Adds a listener, so action can be performed if clicked
	setLayout(new BorderLayout());
	add("North",click);

	bildpfad1 = getParameter("bild");
	bildpfad2 = getParameter("bildzwei");
	
	bildeins = getImage( getDocumentBase(), bildpfad1 );
    bildkopie = bildeins;
    bildzwein = getImage( getDocumentBase(), bildpfad2 );
  	bildkopiezwei = bildzwein;  	
  	
    width1=bildeins.getWidth(this);
    hoehe1=bildeins.getHeight(this);  	
    
    width2=bildzwein.getWidth(this);
    hoehe2=bildzwein.getHeight(this);  
    
    System.out.println(width1);
        
}


public class ButtonListener implements ActionListener  //The listener class
{
	public void actionPerformed(ActionEvent push)  //If button is clicked...will run this
    {
    	
    	
    }
}

public void run() {}

public void start() {}

public void stop() {}

public void destroy() {}

public void paint(Graphics g) throws ArrayIndexOutOfBoundsException {    

    	Grabber lala1=new Grabber(width1*hoehe1);
    	lala1.grab(bildeins, width1, hoehe1); 
    	lala1.ausgabe(lala1.pix);

		g.drawString("lala",50,50);	
		try {
        g.drawImage( bildkopie, 0, 50, this );   
        g.drawImage( bildkopiezwei, 205, 50, this ); 
    	}
    	catch(ArrayIndexOutOfBoundsException k) {
    		
    	}
        	                   
}	

public class Grabber {
	
	Image img;
	int[] pix;
	
	Grabber(int n) {
		pix=new int[n];
	}
	
	protected void grab(Image img, int width1, int hoehe1) {
		// Kopiert die Bilddaten des übergebenen
		// Bildes in das übergebene Array
		PixelGrabber grabber = new PixelGrabber(img, 0, 0, width1, hoehe1, pix, 0, width1);
   		try {
    	   	grabber.grabPixels();
   		}
   		catch (InterruptedException e) {
       		e.printStackTrace();
   		}
	}
	
	protected void ausgabe(int[] pix) { for(int z=0; z<pix.length; z++) { System.out.print(pix[z] + " "); } }
}

} // ENDE DER KLASSE
 

Wildcard

Top Contributor
Wenn du eine ArrayIndexOutOfBoundsException bei 1! kriegst würd ich mal stark davon ausgehen das das Bild nicht richtig geladen wurde...
 

Juscho

Mitglied
was hat java dann für ein problem, wie kann man das bild korrekt laden, in der ausgabe wird es allerdings dargestellt also visuell
 

Juscho

Mitglied
Ich geh mal davon aus, dass die Ursache hier liegt

PixelGrabber grabber = new PixelGrabber(img, 0, 0, width1, hoehe1, pix, 0, width1);
try {
grabber.grabPixels();
}
catch (InterruptedException e) {
e.printStackTrace();
}
 

mic_checker

Top Contributor
Poste ansonsten doch einfach deinen ganzen Code wenn du den Fehler nicht selbst findest...sollte aber nicht so schwer sein, einfach gucken welche Zeile angezeigt wird.
 

Juscho

Mitglied
das war schon der ganze Code den ich dort oben hingeschrieben habe, komm an der Stelle nicht weiter sonst hätt ich schon mehr geschrieben :/
 

Juscho

Mitglied
Ich habe die Werte überprüft und die Werte stimmen nicht, daraufhin habe ich die Bildwerte mal direkt eingesetzt und auch das liefert mir eine Vielzahl an Errors.

Code:
		PixelGrabber grabber = new PixelGrabber(img, 0, 0, 201, 150, pix, 0, 150);
   		try {
    	   	grabber.grabPixels();
   		}
   		catch (InterruptedException e) {
       		e.printStackTrace();
   		}


-1
-267552 Uncaught error fetching image:
java.lang.ArrayIndexOutOfBoundsException: 1
at java.awt.image.PixelGrabber.setPixels(PixelGrabber.java:595)-267552
at sun.awt.image.ImageDecoder.setPixels(ImageDecoder.java:120)
at sun.awt.image.JPEGImageDecoder.sendPixels(JPEGImageDecoder.java:97)
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119
)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.j
ava:246)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
Uncaught error fetching image:
java.lang.ArrayIndexOutOfBoundsException: 1
at java.awt.image.PixelGrabber.setPixels(PixelGrabber.java:595)
at sun.awt.image.ImageDecoder.setPixels(ImageDecoder.java:120)
at sun.awt.image.JPEGImageDecoder.sendPixels(JPEGImageDecoder.java:97)
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119
)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.j
ava:246)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
-267552 Uncaught error fetching image:
java.lang.ArrayIndexOutOfBoundsException: 1
at java.awt.image.PixelGrabber.setPixels(PixelGrabber.java:595)
at sun.awt.image.ImageDecoder.setPixels(ImageDecoder.java:120)
at sun.awt.image.JPEGImageDecoder.sendPixels(JPEGImageDecoder.java:97)
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119
)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.j
ava:246)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
 

mic_checker

Top Contributor
Wenn du das Grabber Objekt erzeugst, hast du es da auch angepasst? Also du teilst dem Array ja dort die Größe mit, deshalb muss da der Parameter auch stimmen - so dass das Array zur Aufnahme groß genug ist. Bringt ja nichts wenn du es bei der Erzeugung des PixelGrabber anpasst , aber das Array pix kann nichts aufnehmen....
 

Juscho

Mitglied
Ok habs jetzt als Applikation hinbekommen

Code:
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;

public class TestKlasse extends JFrame{

	private Image img;
	private Image img2;
	private int[] pix;
	private int[] pix2;

	public TestKlasse() {
		img = getToolkit().getImage("juscho.jpg");
		img2 = getToolkit().getImage("juscho2.jpg");			
		MediaTracker mt = new MediaTracker(this);
		mt.addImage(img, 0);
		mt.addImage(img2, 0);
		try {
		//Warten, bis das Image vollständig geladen ist,
		mt.waitForAll();
		} catch (InterruptedException e) {
		//nothing
		}
		pix = new int[img.getWidth(this)*img.getHeight(this)];
		pix2 = new int[img2.getWidth(this)*img2.getHeight(this)];
		repaint();	
	}
	
	
	public static void main(String[] args) {

	TestKlasse hullala = new TestKlasse();
	hullala.pack();
	hullala.setSize(800,600);
	hullala.show();
	}
	
	public void paint(Graphics g)
	{
		PixelGrabber grabber = new PixelGrabber(img, 0, 0, img.getWidth(this), img.getHeight(this), pix, 0, img.getWidth(this));
		PixelGrabber grabber2 = new PixelGrabber(img2, 0, 0, img.getWidth(this), img.getHeight(this), pix2, 0, img.getWidth(this));
		

		// GRAB
    	try
    	{
      		grabber.grabPixels();
      		grabber2.grabPixels();
    	}
    	catch (Exception e)
    	{
      		System.out.println("PixelGrabber exception"); 
    	}
    
    
		g.drawImage(img,40,40,this);	
		g.drawImage(img2,245,40,this);
		//for(int i=0; i<img.getWidth(this); i++) { for(int j=0; j<img.getHeight(this); j++) { if(pix[(img.getWidth(this)*i)+j]!=pix2[(img.getWidth(this)*i)+j]) {  g.setColor(Color.white); g.drawRect(40+i,200+j,1,1);  } else { g.setColor(Color.black); g.drawRect(40+i,200+j,1,1); }}}
		for(int i=0; i<img.getHeight(this); i++) { for(int j=0; j<img.getWidth(this); j++) { if(pix[(img.getWidth(this)*i)+j]!=pix2[(img.getWidth(this)*i)+j]) {  g.setColor(Color.white); g.drawRect(40+j,200+i,1,1);  } else { g.setColor(Color.black); g.drawRect(40+j,200+i,1,1); }}}
				
	}
	
}
 

mic_checker

Top Contributor
Funzt es denn damit ?

Den andern Code solltest du eigentlich auch zum Laufen kriegen, du kannst ja im Konstruktor mal gucken welche Größe das Array hat.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Applet drawImage gibt falsches bild aus Tools - Maven, Gradle, Ant & mehr 6
N Bild schieben via Drag 'n Drop ist zu schnell! Tools - Maven, Gradle, Ant & mehr 6
G Bild wird in Applet nicht angezeigt! Tools - Maven, Gradle, Ant & mehr 6
C Mein Applet zeigt mein Bild im Internet nicht an Tools - Maven, Gradle, Ant & mehr 2
H Borderlayout und Bild in Applet einfügen Tools - Maven, Gradle, Ant & mehr 4
F Bild speichern Tools - Maven, Gradle, Ant & mehr 4
K Applet mit mehreren Paketen und Bild/Ton-Ordnern in Browser Tools - Maven, Gradle, Ant & mehr 2
U Live-Bild wird im Browser nicht aktualisiert Tools - Maven, Gradle, Ant & mehr 21
G bild öffnen mit BufferedImage Tools - Maven, Gradle, Ant & mehr 4
D Runnable JApplet mit Bild/Ovals "übermalt" Buttons Tools - Maven, Gradle, Ant & mehr 6
F Warum wird das Bild nicht angezeigt? Tools - Maven, Gradle, Ant & mehr 9
F Bild über Applet aussuchen und auf Serverladen Tools - Maven, Gradle, Ant & mehr 14
K Bild auf JButton in Applet, JButton wir aber net angezeigt? Tools - Maven, Gradle, Ant & mehr 7
S mouseEntered mit einem Bild im Applet Tools - Maven, Gradle, Ant & mehr 17
M Applet soll Bild übertragen Tools - Maven, Gradle, Ant & mehr 9
F Ein Bild in einem Applet anzeigen? Tools - Maven, Gradle, Ant & mehr 2
T Mit Applet Bild von einer anderen HP darstellen Tools - Maven, Gradle, Ant & mehr 28
S Access Denied beim Bild laden Tools - Maven, Gradle, Ant & mehr 7
G Bild in einem TextField oder TextArea? Tools - Maven, Gradle, Ant & mehr 3
K Java Lade - Bild ändern Tools - Maven, Gradle, Ant & mehr 9
D sich bewegendes bild + timer Tools - Maven, Gradle, Ant & mehr 6
B Bild Tools - Maven, Gradle, Ant & mehr 2
G Bild im Applet laden und ausgeben Tools - Maven, Gradle, Ant & mehr 2
K Bild (jpg) in einem JApplet Tools - Maven, Gradle, Ant & mehr 2
J Screenshot to Form / Clipboard Bild übertragen Tools - Maven, Gradle, Ant & mehr 2
Z java-puzzel lädt bild nicht Tools - Maven, Gradle, Ant & mehr 3
J Bild als Hintergrund Tools - Maven, Gradle, Ant & mehr 24
S Problem: Bild im Applet wird 3-4 Mal geladen Tools - Maven, Gradle, Ant & mehr 5
H Applet Array[Variable] Tools - Maven, Gradle, Ant & mehr 6
R Array Werte einer JComboBox hinterlegen Tools - Maven, Gradle, Ant & mehr 2
M eventlistener auf button-array Tools - Maven, Gradle, Ant & mehr 6
S Maven CSV-Datei mit Maven einlesen schlägt fehl Tools - Maven, Gradle, Ant & mehr 5
G Applet - Parameter einlesen Tools - Maven, Gradle, Ant & mehr 3
A Mit einem Applet eine txt-Datei einlesen und ausgeben. Tools - Maven, Gradle, Ant & mehr 6
R NullPointerException bei Einlesen von txt-Datei Tools - Maven, Gradle, Ant & mehr 12
S Daten einlesen mit MYSQL Tools - Maven, Gradle, Ant & mehr 2
oppec textdatei mit applet einlesen Tools - Maven, Gradle, Ant & mehr 5
T Grosse Datenmengen in Applet einlesen Tools - Maven, Gradle, Ant & mehr 4
R Datei in Java-Applet einlesen Tools - Maven, Gradle, Ant & mehr 10

Ähnliche Java Themen

Neue Themen


Oben