Grüße!
In meiner Swing-Applikation zeichne ich erst in ein BufferedImage, dieses dann in ein JPanel.
Sofern sich die Größe des JPanels nicht ändert, wird bei jedem update ( bzw. ich rufe bei Bedarf repaint() auf ) das BufferedImage gezeichnet. (Damit spare ich Zeit, da ich ne Menge Linien zeichne, nur bei einem resize wird das BufferedImage neu gefüllt )
Funktioniert alles wie es soll, aber: ab einer bestimmten Größe bzw. wenn das BufferedImage sehr groß wird, ist die Darstellung nich mehr korrekt!! Ich bekomme keine OutOfMemoryException bzw. irgendeine andere Exception!
Gibt es da irgendwelche Beschränkungen bei BufferedImage? Vielleicht sollte ich noch darauf hinweisen, dass mein JPanel einem Scrollpane zugeordnet wurde ( jScrollPane.setViewPort( myPanel ) )
Hier ein Codeausschnitt:
In meiner Swing-Applikation zeichne ich erst in ein BufferedImage, dieses dann in ein JPanel.
Sofern sich die Größe des JPanels nicht ändert, wird bei jedem update ( bzw. ich rufe bei Bedarf repaint() auf ) das BufferedImage gezeichnet. (Damit spare ich Zeit, da ich ne Menge Linien zeichne, nur bei einem resize wird das BufferedImage neu gefüllt )
Funktioniert alles wie es soll, aber: ab einer bestimmten Größe bzw. wenn das BufferedImage sehr groß wird, ist die Darstellung nich mehr korrekt!! Ich bekomme keine OutOfMemoryException bzw. irgendeine andere Exception!
Gibt es da irgendwelche Beschränkungen bei BufferedImage? Vielleicht sollte ich noch darauf hinweisen, dass mein JPanel einem Scrollpane zugeordnet wurde ( jScrollPane.setViewPort( myPanel ) )
Hier ein Codeausschnitt:
Code:
public void paintComponent(Graphics g)
{
...
Graphics2D g2 = (Graphics2D) g;
Dimension d = this.getSize();
Graphics2D g2image = g2;
...
if ( m_graphImage == null || !(d.equals( m_imageDimension )) )
{
m_imageDimension = new Dimension();
m_imageDimension.setSize(d);
Image myImage = this.createImage( d.width, d.height );
if ( myImage instanceof BufferedImage )
{
m_graphImage = (BufferedImage)myImage;
g2image = m_graphImage.createGraphics();
}
g2image.draw( new Line2D.Double( x_old, y_old, x_new, y_new) );
....
g2.drawImage(m_graphImage, null,0,0);
...
}