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.
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: