Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Java2D und Antialiasing

  1. #1
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825

    Java2D und Antialiasing

    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:

    Code:
      Graphics2D g2d = (Graphics2D) g;
      g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        // Hintergrund:
        g2d.drawImage(bild,0,0,bild.getWidth(),bild.getHeight(),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
    Eigentlich ganz einfach, wenn man's weiss!

  2. #2
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    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:
    Code:
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 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
    Geändert von BlueJay (28-04-2011 um 12:54 Uhr)
    Eigentlich ganz einfach, wenn man's weiss!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •