Applet mit Bildbearbeitung

Verum

Mitglied
Hallo,
ich möchte ein Applet programmieren, das ein png-Bild mit schwarzem Hintergrund und weißen Motiv einliest(es kommen ausschließlich 0,0,0 und 255,255,255 vor). Es soll die Randpixel des Motives (weiße Pixel mit schwarzen Nachbarpixeln) erkennen, die Polarkoordinaten unter Berücksichtigung eines Stauchungs-/Dehnungsfaktor berechnen und anschließend die Randpixel zeichnen. Leider habe ich nur wenig Erfahrung mit Java und konnte auch sonst im Internet nichts hilfreiches finden. Das Programm brauche ich, um ein Motiv auf einem Brett nachzubilden, und da ich keine Vorlage in der erforderlichen Größe finde, brauche ich die Polarkoordinaten. Leider funktioniert das Einlesen anscheinend noch nicht und für manch andere Sache(Pixelfarbe einlesen, Bildmaße erkennen) fand ich keine Methode. Bitte daher um Hilfe.

Java:
import javax.swing.JApplet;
import java.awt.*;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;

public class Monster extends JApplet {
	int backgroundHeight=600;
	int backgroundWidth=600;
	int x;
	int y;
	double length;
	double angle;
	int upperGap;
	int lowerGap;
	int xLeft=0;
	int yUp=10000;
	int xRight=10000;
	int yDown=0;
	Image monster;

	public void main(String[] args) {
		checkSize(monster);
		for (x=0; x<monster.getWidth(); x++) {
			for (y=0; y<monster.getHeight(); y++) {
				if (checkColor(monster, x, y)==true && checkNeighbourhood(monster, x, y)==true) {
					paint(g, x, y);
					length=Math.sqrt((Math.pow(x, 2)+(Math.pow(y, 2))));
					angle=Math.asin(x/length);
					System.out.println(length);
				}
			}
		}
	}

	public void init()
	{
		setBackground(new Color(0,0,0));
		resize(backgroundWidth, backgroundHeight);
		Image monster =  getImage(getDocumentBase(),"c:/monster.png");
	}

	public void paint(Graphics g, int x, int y) {
		((java.awt.Graphics2D) g).setRenderingHint(
				java.awt.RenderingHints.KEY_ANTIALIASING,
				java.awt.RenderingHints.VALUE_ANTIALIAS_ON);
		g.setColor(Color.green);
		g.drawLine(x, y, x, y);
	}

	public boolean checkColor(Image monster,int x, int y) {
		if (monster.Color(x, y)==Color.white) {
			return true;
		}
		else {
			return false;
		}
	}

	public void checkSize(Image monster) {
		for (int i=0; i<monster.getWidth(); i++) {
			for (int j=0; i<monster.getHeight(); j++) {
				if (checkColor(monster, i, j)==true) {
					if (i>xLeft) {		//linkester Punkt
						xLeft=i;
					}
					if (i<xRight) {		//rechtester Punkt
						xRight=i;
					}
					if (j<yUp) {		//oberster Punkt
						yUp=j;
					}
					if (j>yDown) {		//unterster Punkt
						yDown=j;
					}
				}
			}
		}
	}

	public boolean checkNeighbourhood(Image monster, int x, int y) {
		if (x+1<=monster.Width() && x-1>=0 && y+1<=monster.Height && y-1>=0) {
			if (monster.Color(x+1, y)==Color.black || monster.Color(x, y+1)==Color.black ||
					monster.Color(x-1, y)==Color.black || monster.Color(x, y-1)==Color.black) {
				return true;
			}
			else {
				return false;
			}
		}
	}
}
 
Zuletzt bearbeitet:

twseitex

Mitglied
.... ein Ansatz in 2 Varianten

Java:
// +++++ X03 ist URL erzeugen von Datei im aktuellen Pfad
   
    if(X03!=null)
    {
     // +++++ laden nach Image X04
     try 
     {X04=Toolkit.getDefaultToolkit().getImage(X03);}  // X03 ist URL
     				// AWTError-Klasse wird benutztbar bei Fehler von 
         //   getDefaultToolkit(), aber diese Klasse dient nur der
         //   Erstellung einer eigenen Meldung und ist somit keine
         //   Java-Exception
     													
     catch(SecurityException e1) // Accress denied
     {X04=null;
      // System.out.println(e1.getMessage());
     }
    }

oder

Java:
// +++++ X04 als BufferedInputStream der Datei im aktuellen Pfad
//     Der Stream ist offen und somit nicht im Zeigerfeld speicherbar !
    if(X04!=null)
    {
     // +++++ ImageIO.read() benutzten
     //            interner Cache nicht nutzbar
     //            Mediatracker nicht nutzbar
     try 
     {X03=ImageIO.read(X04);
        // ImageIO.read() erzeugt immer BufferedImage-Zeiger
        //              (also impliziertes new(), wobei damit alle
        //                    Parameter des new BufferedImage() nicht
        //                    einstellbar sind: Es wird automatisch bestimmt,
        //                    wie die Bilddaten verarbeitet werden.
        // Transparenz muss Teil des Bildes sein.
    	   // Da das Bild geladen wird, ist Transparenz Teil des Bildes.
    	   // File als Quelle bei Applet nicht möglich, da das im Browser
    	   //     im HTML-Fenster läuft, das nur URL kennt und kein
    	   //      lokales Dateisystem, also kein File.
    	   // ImageIO.read() benutzt ImageReader
     } 
     catch(IOException e1) 
     {X03=null;
     }
     catch(IllegalArgumentException e2)
     {X03=null;

     }
     
     // ----- BufferedInputStream schliessen
	try
 	{X04.close();}
 	catch (IOException e3)
 	{
 	 // nichts
	}
    }
 

Verum

Mitglied
Vielen Dank für deine ausführliche Antwort, aber leider komm ich da nicht recht mit ;(
Ich habe verstanden, dass ein Applet Daten nur ausm Internet holen kann. Es würde ja reichen, wenn ich ein "normales" Programm habe, das mir die Koordinaten auflistet und ein Bild ausgibt. Wie könnte ich da auf dem einfachsten Weg ein Bild laden und wie heißen die Methoden, um die Farbe eines Pixels zu kriegen. Habe zwar in den Dokumentationen nachgeschaut, aber da gibts so viele Klassen und Sachen dass ich nicht durchblicke.
 

Verum

Mitglied
Ich habe jetzt alle Dokumentationen und Tutorials gelesen :rtfm: und das ganze Programm neu geschrieben. checkNeighbourhood und checkPixels sehen vielleicht seltsam aus (-16777216 steht iwie für schwarz), funktionieren aber einwandfrei. Das letzte Problem liegt darin, dass mir Eclipse in Zeile 35 das g markiert (g cannot be resolved to a variable) und bei checkSize die Maximal- und Minimalwerte mit der gleichen Meldung. Außerdem weis ich nicht, wie ich paint in mein awt-frame malen lassen kann. Wäre für Lösungsvorschläge sehr dankbar.

Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Monster extends Frame {
	
	public Monster (int width, int height) {
		Frame f=new Frame("Monster");
		f.setSize(height, width);
		f.setBackground(Color.black);
		f.setVisible(true);
	}

	public static void main(String[] args) {
		int maxWidth=0;
		int minWidth=10000;
		int maxHeight=0;
		int minHeight=10000;
		File file= new File("c:\\monster.png");
		Image image=fileToImage(file);
		int width=image.getWidth(null);
		int height=image.getHeight(null);
		checkSize(image, width, height);
		Monster silhouette1=new Monster (width, height);
		for (int i=0; i<width; i++) {
			for (int j=0; j<height; j++) {
				if (checkPixels(image, i, j)==true && checkNeighbourhood(image, i, j)==true) {
					paint(g, i, j);
				}
			}
		}	
	}

	public static void paint (Graphics g, int x, int y) {
		g.setColor(Color.green);
		g.drawLine(x, y, x, y);
	}

	public static void checkSize(Image image, int width, int height) {
		for (int i=0; i<width; i++) {
			for (int j=0; j<height; j++) {
				if (checkPixels(image, i, j)==true) {
					if (i<minWidth) {
						minWidth=i;
					}
					if (i>maxWidth) {
						maxWidth=i;
					}
					if (j>maxHeight) {
						maxHeight=j;
					}
					if (j<minHeight) {
						minHeight=j;
					}
				}
			}
		}
	}

	public static boolean checkPixels(Image image, int x, int y) {
		int color=  ((BufferedImage) image).getRGB(x, y); 
		int  red   = (color & 0x00ff0000) >> 16;
		int  green = (color & 0x0000ff00) >> 8;
		int  blue  =  color & 0x000000ff;
		if (red==255 && green==255 && blue==255 ) {
			return true;
		}
		return false;
	}

	public static Image fileToImage (File file) {
		BufferedImage image = null;
		try {
			image = ImageIO.read(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return image;
	}
	
	public static boolean checkNeighbourhood(Image image, int x, int y) {
		if (((BufferedImage) image).getRGB(x-1,y)==-16777216 ||
		    ((BufferedImage) image).getRGB(x,y-1)==-16777216 ||
		    ((BufferedImage) image).getRGB(x+1,y)==-16777216 ||
		    ((BufferedImage) image).getRGB(x,y+1)==-16777216) {
			return true;
		}
		return false;
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Grafikformat für AWT-Applet? AWT, Swing, JavaFX & SWT 0
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
T Applet Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 8
C Applet Applet funktioniert in Eclipse aber nicht in Browser AWT, Swing, JavaFX & SWT 1
S Sandboxed Applet weiterhin moeglich..? AWT, Swing, JavaFX & SWT 5
S Oracle's neue Sicherheitseinstellungen zerstoeren mein Applet. Was tun? AWT, Swing, JavaFX & SWT 3
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
U CardLayout im Applet AWT, Swing, JavaFX & SWT 4
J Applet Applet Vererbung/Überladen AWT, Swing, JavaFX & SWT 5
G JavaFX mit ANT deployen als Applet AWT, Swing, JavaFX & SWT 3
S Applet Application 2 applet AWT, Swing, JavaFX & SWT 3
T Applet JTattoo Look and Feel AWT, Swing, JavaFX & SWT 5
T Signiertes Applet Urheber angeben AWT, Swing, JavaFX & SWT 5
S Applet Repaint AWT, Swing, JavaFX & SWT 3
B Java-Applet Parameter übergabe? AWT, Swing, JavaFX & SWT 2
M Applet mit Bildern AWT, Swing, JavaFX & SWT 2
T Applet in JSP einbinden AWT, Swing, JavaFX & SWT 4
R MouseEvent.getX() liefert in Applet Screen-Koordinate AWT, Swing, JavaFX & SWT 2
K Applet Wieso kann ich keine Array im Applet initialisieren AWT, Swing, JavaFX & SWT 13
A Applet Applet vom Web-Server aus aufrufen AWT, Swing, JavaFX & SWT 11
A Applet Applet startet nicht AWT, Swing, JavaFX & SWT 2
P Tatsächliche Größe für Applet AWT, Swing, JavaFX & SWT 3
B Applet Aus Applet signiertes jar mit externen libs erstellen AWT, Swing, JavaFX & SWT 9
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
M Warum funktioniert mein Applet nicht? AWT, Swing, JavaFX & SWT 6
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
R Applet JavaScript Methodenaufruf AWT, Swing, JavaFX & SWT 2
A Applet Animiertes gif in awt applet anzeigen AWT, Swing, JavaFX & SWT 11
X Applet Java Applet Datei Ausführung AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
A Applet Applet aus Code neu starten AWT, Swing, JavaFX & SWT 2
K Applet erkennt keine Frameverkleinerung AWT, Swing, JavaFX & SWT 5
S Applet funktioniert nach Browserreload nicht richtig AWT, Swing, JavaFX & SWT 2
T Applet Applet vs. WebStart AWT, Swing, JavaFX & SWT 4
S Applet starten AWT, Swing, JavaFX & SWT 4
K JTable im Browser nicht zu sehen - Applet AWT, Swing, JavaFX & SWT 6
B Applet Button oder Toolbar in einem Applet AWT, Swing, JavaFX & SWT 5
V Applet Applet starten schlägt fehl AWT, Swing, JavaFX & SWT 2
W Button in Applet AWT, Swing, JavaFX & SWT 9
kniffel GUI-Applet JTable füllt Hintergrund völlig aus AWT, Swing, JavaFX & SWT 4
J Applet Java-Applet friert mit Firefox ein AWT, Swing, JavaFX & SWT 8
J Applet Tetris flackert AWT, Swing, JavaFX & SWT 9
F Applet Applet starten...(+Timer?) AWT, Swing, JavaFX & SWT 12
S [JAVA] JFrame in Applet/JApplet AWT, Swing, JavaFX & SWT 14
D Applet Applet das auf fremden Libraries basiert einbinden? AWT, Swing, JavaFX & SWT 20
M Applet wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
E Applet Neuen Tab aus Applet öffnen AWT, Swing, JavaFX & SWT 3
G Applet, Link ermitteln, dem der Benutzer gefolgt ist AWT, Swing, JavaFX & SWT 2
K Email versenden ueber Applet AWT, Swing, JavaFX & SWT 11
S Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 6
S Button aktivieren (Applet) AWT, Swing, JavaFX & SWT 2
3 Applet Applet zeigt nur weiße Fläche AWT, Swing, JavaFX & SWT 15
B 2 Probleme (JFrame & Applet) AWT, Swing, JavaFX & SWT 7
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
H applet Methode aus abstrakter Klasse aufrufen AWT, Swing, JavaFX & SWT 12
H Applet - Hilfedateien im Browser öffnen / eine Webseite laden AWT, Swing, JavaFX & SWT 6
O JPanel aus Applet starten AWT, Swing, JavaFX & SWT 3
O Applet-Steuerung mit Tastaturbefehlen AWT, Swing, JavaFX & SWT 3
F 4-Gewinnt als Applet AWT, Swing, JavaFX & SWT 24
F Applet vs Stand-Alone-Client AWT, Swing, JavaFX & SWT 3
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
D Probleme mit MouseWheelListener und JLayeredPane in Applet AWT, Swing, JavaFX & SWT 2
G Applet und Swing Anwendung AWT, Swing, JavaFX & SWT 2
S Applet - Aerger mit dem Hintergrundbild - JLabel und JTextfield AWT, Swing, JavaFX & SWT 7
F Applet zeigt Bilder nicht an AWT, Swing, JavaFX & SWT 5
R for-Schleife in Applet ausgeben AWT, Swing, JavaFX & SWT 3
S Bild wird auf Canvas in Applet nicht gezeichnet AWT, Swing, JavaFX & SWT 4
W Swing heapsort + Applet AWT, Swing, JavaFX & SWT 4
P Diagramm in einem Applet zeichnen AWT, Swing, JavaFX & SWT 4
M Java Applet JTable/JList AWT, Swing, JavaFX & SWT 6
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2
K Alternative zu Applet mit HTML-Einbindung AWT, Swing, JavaFX & SWT 11
J Java-Applet beenden AWT, Swing, JavaFX & SWT 3
R Applet aus JFrame starten AWT, Swing, JavaFX & SWT 2
T Konfiguration speichern in Applet AWT, Swing, JavaFX & SWT 2
P Swing Roter Faden beim Applet GUI Programmieren AWT, Swing, JavaFX & SWT 2
T HTML Seite neu laden mittels Applet AWT, Swing, JavaFX & SWT 2
T Icon von Frame ändern - Applet AWT, Swing, JavaFX & SWT 2
T Java Applet beenden AWT, Swing, JavaFX & SWT 2
M Swing Butten & TextFields aus Applet im JFrame nicht sichtbar AWT, Swing, JavaFX & SWT 2
I Swing .Jar Datei - funktioniert - nun als Applet AWT, Swing, JavaFX & SWT 13
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
M AWT text im applet formatieren AWT, Swing, JavaFX & SWT 5
L Applet Frage AWT, Swing, JavaFX & SWT 25
1 Verständnisprobleme bei Java Applet AWT, Swing, JavaFX & SWT 13
B Unterschied JFrame/Applet AWT, Swing, JavaFX & SWT 12
T [Applet] startet in Eclipse aber nicht im Browser AWT, Swing, JavaFX & SWT 2
G JSlider in Applet AWT, Swing, JavaFX & SWT 4
P Swing Applet AWT, Swing, JavaFX & SWT 2
R problem mit bildanzeige in applet und main AWT, Swing, JavaFX & SWT 2
A Applet kommt offline nicht mit FileReader zurecht AWT, Swing, JavaFX & SWT 3
F Applet und Popup AWT, Swing, JavaFX & SWT 4
G Wie startet man ein Applet ? AWT, Swing, JavaFX & SWT 4
R Ein Applet von einem Applet öffnen lassen AWT, Swing, JavaFX & SWT 2
Z Applet ausblenden AWT, Swing, JavaFX & SWT 5
G JList wird in einem Applet nur teilweise aktualisiert AWT, Swing, JavaFX & SWT 12
P Applet darstellung von Textfeldern Problem AWT, Swing, JavaFX & SWT 3
I Applet --> neues Fenster öffnen AWT, Swing, JavaFX & SWT 11
I Applet mit Panels (so richtig, gehts besser?) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben