PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java2D und Antialiasing



BlueJay
28-04-2011, 09:27
Hallo Leute,

da ist so eine Klasse, die unter anderem Linien beliebig auf ein JPanel zieht.
Leider sind das bei bestimmten Winkeln eher Treppchen.

Ziel ist es aber, solche Linien a la Paintshop oder Gimp hinzubekommen.

Die Graphics2D wird bereits verwendet.
Aber egal, was für einen Parameter ich bei Stroke einsetze, man sieht immer Treppchen.

Code:



Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIA LIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// Hintergrund:
g2d.drawImage(bild,0,0,bild.getWidth(),bild.getHei ght(),this);

g2d.setColor(Color.white);
g2d.setStroke(new BasicStroke(BasicStroke.JOIN_BEVEL));

for (i=0; i<p_.vliste.get_size(); i++)
{ k=p_.vliste.get_element(i);
x0=(int)p_.kn[p_.vb[k].k0].mitte.x;
y0=(int)p_.kn[p_.vb[k].k0].mitte.y;
xn=(int)p_.kn[p_.vb[k].kn].mitte.x;
yn=(int)p_.kn[p_.vb[k].kn].mitte.y;
g2d.drawLine(x0,y0,xn,yn);
}



Die BasicStrokes mit CAP_ am Anfang brachten gar nichts, JOIN_BEVEL sah etwas besser, aber noch lange nicht zufriedenstellend aus.

An welchenSchrauben kann man da noch drehen?

Gruß,
Ulrike

BlueJay
28-04-2011, 11:41
Habe jetzt zu den TEXT_ALIASING noch das normale ALIASING hinzugefügt,
nun sieht man zwar keine Treppen mehr, aber ein Moire.

Ändern der BasicStroke-Breite auf 2 ließ auc dieses verschwinden.

Also zusammengefasst:


g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASI NG, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(Color.white);
g2d.setStroke(new BasicStroke(2);
...
g2d.draw(new java.awt.geom.Line2D.Double(x0,y0,xn,yn)); // etwas weniger Moire als beim Verwenden von drawLine