# Graphics fillOval weiche Kanten



## FunnyO (5. Aug 2015)

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:


```
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!


----------



## Enceladus271 (5. Aug 2015)

Wenn du einen richtigen Farbverlauf haben willst kann ich dir nicht helfen. Aber Antialiasing ist ganz einfach:

```
@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 );
   }
```


----------



## FunnyO (5. Aug 2015)

Das hat den Trick gemacht, danke 
Antialising war alles, was ich gebraucht habe. Ein Verlauf wäre nur eine Erweiterung  Danke!


----------



## javampir (5. Aug 2015)

schau mal auch hier dazu:
https://developmentality.wordpress.com/2010/02/09/quick-hit-antialiasing-in-java-graphics2d/
da werden verschiedene methoden zum antialiasing beschrieben


----------



## FunnyO (6. Aug 2015)

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


----------



## BRoll (6. Aug 2015)

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).


----------



## FunnyO (6. Aug 2015)

Ah, und wie mache ich, dass fillOval die Transparenz nur am Rand verwendet? muss ich vielleicht ein weiteres Objekt zeichnen?


----------



## BRoll (6. Aug 2015)

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.


----------



## FunnyO (7. Aug 2015)

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.


----------

