13. august 2003 - 10:00Der er
18 kommentarer og 1 løsning
Hvorfor kan jeg ikke se mit billede ?
Jeg er igang med at lave et program som skal tegne ruter. Ideen er at man ligger et billede af et kort ind, og derefter skal man kun tegne ovenpå billedet.
Tegne funktionen virker, men jeg kan ikke se mit billede.
int antalPunkter=0; Point[] punkter = new Point[100]; double distance = 0; String sti = "C:/Documents and Settings/6x108081/Dokumenter/JAVA/Rutetest/draw/";
// Viser baggrunds kort private void drawMap(){ Image image = (Image) createImage(1200,800); java.awt.Graphics gr = this.getGraphics(); //java.awt.Graphics2D gr2 = (java.awt.Graphics2D)gr; ImageIcon i = new ImageIcon("Sti"+"Cykelkort.jpg"); Image p = i.getImage(); gr.drawImage(p,0,0,this); }
private void drawCircle(java.awt.event.MouseEvent evt) { java.awt.Graphics g = this.getGraphics(); java.awt.Graphics2D g2 = (java.awt.Graphics2D)g; // Tegner en prik hvor musen har klikket g2.setColor(java.awt.Color.RED); g2.fillOval(evt.getX()-3, evt.getY()-3, 6,6); // Tegner en streg til forrige punkt hvis der er et. if (antalPunkter>0){ g2.drawLine(evt.getX(), evt.getY(), punkter[antalPunkter-1].x,punkter[antalPunkter-1].y); double temp1= (punkter[antalPunkter-1].x-evt.getX())*(punkter[antalPunkter-1].x-evt.getX()); double temp2= (punkter[antalPunkter-1].y-evt.getY())*(punkter[antalPunkter-1].y-evt.getY()); if (temp1<0) temp1= temp1*(-1); if (temp2<0) temp2= temp2*(-1); double temp = temp1+temp2; distance = Math.sqrt(temp1+temp2)*0.028346*100; System.out.println(distance); } } private void exitForm(java.awt.event.WindowEvent evt) {System.exit(0);}
public static void main(String args[]) { new Draw().show(); }}
addWindowListener(new java.awt.event.WindowAdapter() { public void windowOpened(java.awt.event.WindowEvent evt) { drawMap(); } }); private void drawMap(){ Image image = (Image) createImage(1200,800); java.awt.Graphics gr = this.getGraphics(); ImageIcon i = new ImageIcon("Sti"+"Cykelkort.jpg"); Image p = i.getImage(); gr.drawImage(p,0,0,this); } er det her et sted jeg tror problemet ligger
Hvis jeg nu laver punkterne som en klasse, sådan at hvert punkt tegner sig selv. Men det kræver at hele billedet skal tegnes igen, hvergang der laves et nyt punkt. Programmet ville blive en del langsomere.
Så nu virker det. Den kommer med et par null pointer, men den laver det rigtigt nok. Lige med undtagelse af distance udregningen. Den bliver lidt fucked up pga. man tegner ruten flere gange.
int antalPunkter=0; Point[] punkter = new Point[100]; double distance = 0; String sti = "C:/Documents and Settings/6x108081/Dokumenter/JAVA/Rutetest/draw/";
public void paint(java.awt.Graphics g){ super.paint(g); drawMap(); for (int i=0;i <punkter.length;i++) drawCircle(punkter[i].x,punkter[i].y,i); }
// Viser baggrunds kort private void drawMap(){ Image image = (Image) createImage(1200,800); java.awt.Graphics gr = this.getGraphics(); //java.awt.Graphics2D gr2 = (java.awt.Graphics2D)gr; ImageIcon i = new ImageIcon(sti + "Cykelkort2.jpg"); Image p = i.getImage(); gr.drawImage(p,0,0,this); }
private void drawCircle(int x,int y,int nr) { java.awt.Graphics g = this.getGraphics(); java.awt.Graphics2D g2 = (java.awt.Graphics2D)g; // Tegner en prik hvor musen har klikket g2.setColor(java.awt.Color.RED); g2.fillOval(x-3, y-3, 6,6); // Tegner en streg til forrige punkt hvis der er et. if (nr>0){ g2.drawLine(x, y, punkter[nr-1].x,punkter[nr-1].y); double temp1= (punkter[nr-1].x-x)*(punkter[nr-1].x-x); double temp2= (punkter[nr-1].y-y)*(punkter[nr-1].y-y); if (temp1<0) temp1= temp1*(-1); if (temp2<0) temp2= temp2*(-1); double temp = temp1+temp2; distance = distance + Math.sqrt(temp1+temp2)*0.0175;//0.028346; //afhænger af målestokforhold System.out.println(distance); } } private void exitForm(java.awt.event.WindowEvent evt) {System.exit(0);}
public static void main(String args[]) { new Draw().show(); }}
Ja det ser jo meget pænt ud, men du gemmer ikke punkterne så man kan skal starte forfra hvis man laver en fejl. Ideen er at det skal udbygges med en fortryd knap, et par scrollbare og et sted man kan indtaste målestokforholdet på billedet. Evt også en knap hvor man scanner et billede.
Ja, se det meldte din historie jo ikke noget om, før nu!
Spørmålet er så hvor mange gange skal man kunne fortryde, for det kan jo blandt andet laves ved at have flere "offscreen images" sådan at du hver gang der tegnes, flyttes det bageste images frem og tegne arbejdet foregår så der - men du er jo stort set selv færdig med gemme funktionen, så det må vel bare være at køre videre derfra. Jeg har kun lavet så vinduet kan minimeres og maksimeres.
Jeg har prøvet ligge punktet i klasse for sig. Jeg har dog ikke testet det endnu.
import java.awt.*;
public class Punkt {
private int x=0; private int y=0; private Punkt last=null; /** Creates a new instance of Punkt */ public Punkt(int xk, int yk, Punkt pLast) { x=xk; y=yk; last = pLast; }
public void paint(Graphics g) { g.setColor(java.awt.Color.BLUE); g.fillOval(x-3, y-3, 6,6); // Tegner en streg til forrige punkt hvis der er et. if (last!=null) g.drawLine(x, y, last.getX(), last.getY()); }
public double getDist(double målestok){ double temp1= (last.getX()-x)*(last.getX()-x); double temp2= (last.getY()-y)*(last.getY()-y); if (temp1<0) temp1= temp1*(-1); if (temp2<0) temp2= temp2*(-1); double temp = temp1+temp2; double distance = Math.sqrt(temp1+temp2)*målestok; return distance; }
public int getX(){return x;} public int getY(){return y;} public Punkt getPunkt(){return this;} }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.