2014-09-04 6 views
6

Ich möchte nur den Kreis, der genau 15x15 Pixel groß ist, und füllen und umreißen zeichnen. Ich benutze Java2D. Das Problem ist, als Folge der nacheinander genannten Graphics2D.fill(circle) und Graphics2D.draw(circle) der Kreis von 16x16 Pixel gezeichnet. Es ist wegen des internen Java2D outlinig Mechanismus, der für gegebene 15x15 Größe 16x16 Kreisumreiß liefert. Außerdem, wenn ich Java2D frage, um 14x14 Pixel Kreis Umriss zeichnen - es zeichnet genau 14x14 px. Ich habe versucht, mit Antialiasing und stroke Hinweise auf Renderer ohne Glück zu spielen.
illustration Hier sind:Wie zeichne inneren Strich mit Java2D

  1. RenderingHints.VALUE_STROKE_NORMALIZE und Ellipse2D.Double(0, 0, 15, 15) Umriss
  2. RenderingHints.VALUE_STROKE_PURE und gleiche Kontur - Mitteilung 1px Verzerrung
  3. frühere Schlaganfall Hinweis und Ellipse2D.Double(0, 0, 14, 14)
  4. RenderingHints.VALUE_STROKE_NORMALIZE, Ellipse2D.Double(0, 0, 15, 15) Umriss und Anti-Aliasing Hinweis

Also, ich kann nicht 15px Kreis Umriss zeichnen (auch 13 px, 29 px und jede ungerade Größe) mit Java2D. Gibt es eine Möglichkeit, einen inneren Strich zu zeichnen, der Pixel am inneren Rand der Form füllt?

+0

IMHO gibt es keine Möglichkeit, es in Java Grapics/Graphics2D-Bibliothek zu tun, weil ich in der Vergangenheit mit dem gleichen Problem konfrontiert war und keine vernünftige Lösung finden konnte. Wie auch immer, die Optionen 1 und 4 sehen gut aus, falls Sie Ihre Grafikbibliothek nicht ändern wollen. – dagi12

Antwort

0

Sieht aus wie "1" ist die Option, die Sie wollen, aber Sie haben einen Fehler von eins nach eins. 0,0 bis 15,15 sollen eigentlich 16 Pixel sein. Wenn Sie 15 Pixel benötigen, benötigen Sie 0,0 bis 14,14.

Wenn es speziell 15x15 mit einer vordefinierten Farbe ist, können Sie in einem Bildbearbeitungsprogramm vorrendern und nur drawImage verwenden.

Sie können auch über eine Übersetzung von .5, .5 nachdenken. Sehen Sie, wie # 2 aussieht, wenn Sie Ellipse.Double (.5, .5,15.5,15.5) tun. Sie können mit diesem Ergebnis glücklicher sein.