M
mitsung
Gast
Hallo,
ich programmiere gerade an einem Mal- und Bildbearbeitungsprogramm. Offensichtlich sind meine Malmethoden(Klassen) jedoch zu rechen- und Speicheraufwendig. Geschwindigkeitsprobleme treten beim Zeichnen aller elementaren Grundformen in größeren Projekten auf. Stellvertretend hier mal der Code für das Linien zeichnen:
Möglicherweise sieht ja jemand eine bessere Lösung. Es soll jedoch auch eine Linie auf einem komplexen Farbhintergrund , etwa einem Digitalfoto, gezeichnet werden können.
Das Zeichnen in kleinen Bildern bis 1000 x 1000 px funktioniert ganz gut, aber alles darüber wird ziemlich träge und bei hochauflösenden Fotos (ca. 3000 x 3000 px) bekomme ich ein out of Heap Space Exception. (getestet auf AMD Athlon 1,8GHz, 500MB)
Auf einem Core 2 Duo mit 1GB tritt keines der Probleme auf.
Ich hoffe jemand kann mir einen Tip geben.
Micha
ich programmiere gerade an einem Mal- und Bildbearbeitungsprogramm. Offensichtlich sind meine Malmethoden(Klassen) jedoch zu rechen- und Speicheraufwendig. Geschwindigkeitsprobleme treten beim Zeichnen aller elementaren Grundformen in größeren Projekten auf. Stellvertretend hier mal der Code für das Linien zeichnen:
Code:
class LineTool extends MouseAdapter{
private int x;
private int y;
BufferedImage back; // puffert das aktuell angezeigte Bild (ausgabe)
private Graphics2D g2;
public void mousePressed(MouseEvent e){
x = e.getX();
y = e.getY();
back = new BufferedImage(ausgabe.getWidth(),
ausgabe.getHeight(), BufferedImage.TYPE_INT_RGB);
g2 = back.createGraphics();
g2.drawImage(ausgabe,0,0,null);
g2.dispose();
}
public void mouseDragged(MouseEvent e){
BufferedImage temp = new BufferedImage(back.getWidth(),
back.getHeight(), BufferedImage.TYPE_INT_RGB);
g2 = temp.createGraphics();
g2.setStroke(new BasicStroke(strokeFloat, kappe, verbindung));
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, antialias);
g2.drawImage(back, 0, 0,null);
g2.setColor(g2d.getColor());
g2.drawLine(x, y, e.getX(), e.getY());
g2.dispose();
setImage(temp);
}
}
Möglicherweise sieht ja jemand eine bessere Lösung. Es soll jedoch auch eine Linie auf einem komplexen Farbhintergrund , etwa einem Digitalfoto, gezeichnet werden können.
Das Zeichnen in kleinen Bildern bis 1000 x 1000 px funktioniert ganz gut, aber alles darüber wird ziemlich träge und bei hochauflösenden Fotos (ca. 3000 x 3000 px) bekomme ich ein out of Heap Space Exception. (getestet auf AMD Athlon 1,8GHz, 500MB)
Auf einem Core 2 Duo mit 1GB tritt keines der Probleme auf.
Ich hoffe jemand kann mir einen Tip geben.
Micha