Graphics fillOval weiche Kanten

FunnyO

Mitglied
Hallo,

Ich habe überall danach gesucht, kann jedoch nicht herausfinden, wie es funktioniert. Ich möchte bei fillOval die kantigen Ränder etwas weicher machen, oder gar zu einem Verlauf in die Umgebung machen. Leider kann ich nichts finden. Man kann wohl kaum von Java gute Grafik erwarten... Hier ist der Code:

Java:
public void paint(Graphics gra) {
     if (s == true) {
       Random rc = new Random();
         PointerInfo a = MouseInfo.getPointerInfo();
         Point c = a.getLocation();
         int x2 = (int) c.getX();
         int y2 = (int) c.getY();
         x = x2 - 200;
         y = y2 - 200;
       this.repaint();      
       float r = (float) (rc.nextFloat());
       float g = (float) (rc.nextFloat());
       float b = (float) (rc.nextFloat());
       Color rColor = new Color(r, g, b);
       rColor.brighter();
       gra.setColor(rColor);
       gra.fillOval(x, y, 400, 400);
}

Danke für die Hilfe!
 
Zuletzt bearbeitet von einem Moderator:
Wenn du einen richtigen Farbverlauf haben willst kann ich dir nicht helfen. Aber Antialiasing ist ganz einfach:
Java:
  @Override
   protected void paintComponent( Graphics g ) {
     super.paintComponent( g );
     Graphics2D g2 = (Graphics2D) g;
     g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
     g2.fillOval( 10, 10, 190, 90 );
   }
 
Das hat den Trick gemacht, danke 😀
Antialising war alles, was ich gebraucht habe. Ein Verlauf wäre nur eine Erweiterung 😀 Danke!
 
Danke! Habe es nun auf Bilinear gestellt, da es näher an Farbverlauf dran kommt.
Falls jemand weiß, wie ich die Farbe nun mit der Umgebung verschmelzen lassen kann, also ins Transparente geht, wäre es sehr hilfreich. Ich zeichne die Ovalen übereinander, somit sollte nicht plötzlich ein transparentes Loch entstehen, sondern die Farbe, die zuvor gezeichnet wurde behalten 😀
 
Für Transparenz musst du nur noch einen Alpha Wert angeben.
Zb. new Color(r,g,b,a); mit a = 255 (=> volle abdeckung)
mit a = 0 (=> keine abdeckung).
 
Ah, und wie mache ich, dass fillOval die Transparenz nur am Rand verwendet? muss ich vielleicht ein weiteres Objekt zeichnen?
 
Ja so könntest du es machen. Einmal das Oval mit Transparenz und darüber das kleinere gefüllte.
Dann ist nur noch das was am Rand übrig bleibt transparent.
 
Umständlich, aber es passt, habe nun 3 Ovale mit +1 Pixel mit je 0.75,0.5 und 0.25 Transparenz auf das 😀 erste Oval gelegt.
 

Zurück
Oben