mogel
6. Januar 2015 um 02:05
1
Moin,
ich erzeuge von einem Control einen Screenshot und zeichne darauf eine rote Linie. Die wird aber weis dargestellt.
instance.paint(img.getGraphics());
img.getGraphics().setColor(Color.RED);
img.getGraphics().drawLine(0, 0, 100, 100);
Kann mir jeand zufällig verraten was da schief läuft?
btw: später soll das Bild eigentlich mit einem grauen Schleier bedeckt werden, da es als Hintergrund für weitere Benutzereingaben dient.
hand, mogel
ein tatsächlich nutzbares Testprogramm wäre zuviel der Mühe gewesen?
in JavaDoc der Methode steht, dass besser gleich createGraphics() aufzurufen wäre, was schon alles sagt,
eine lokale Variable zu erzeugen ist fast immer besser als zwei derartige Aufrufe,
eben auch um solche Überraschungen zu vermeiden
public static void main(String[] args) {
final BufferedImage img = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
Graphics g = img.getGraphics();
g.setColor(Color.RED);
g.drawLine(0, 0, 100, 100);
JFrame f = new JFrame();
JPanel p = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, null);
}
};
f.add(p);
f.setSize(400, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
was zu deinem paint-Aufruf an wer weiß wo VOR der roten Linie zu beachten ist, kann ich nicht sagen
die Farbe heißt übrigens Weiß (oder schlimmstenfalls Weiss)
Ungestestet tippe ich auf das, was bei SlaterB im Subtext mitschwingt: “img.getGraphics()” könnte jedes mal ein neues Graphics liefern.
System.out.println(System.identityHashCode(img.getGraphics()));
System.out.println(System.identityHashCode(img.getGraphics()));
Besser also
Graphics g = img.createGraphics();
g.drawStuff(...);
g.dispose(); // Kann auch nicht schaden ;-)
mogel
6. Januar 2015 um 05:02
4
mir fällt gerade keine Ausreden ein
das war das Problem - mit Graphics g = img.createGraphics();
funktioniert es
danke, mogel