Freitag, 26. November 2004
Transparenz und Glättung für die Kreise
coach, 13:12h
Im Kreiseditor werden die Kreise in dem Raster dargestellt, dass der Bildschirm bietet. Für die Kreise auf unseren Monitoren ist das Raster klar zu erkennen. Die Auflösung kann zwar nicht erhöht werden, aber der Übergang von "Kreis" zu "nicht Kreis" kann künstlich geglättet werden. Diese Technik wird Antialiasing genannt. Der Übergang wird quasi verwischt, was zu deutlich "runderen" Kreisen führt. In Java2D kann diese Glättung über eine Einstellung des grafischen Kontextes Graphics2D in der paint-Methode erreicht werden. Hierzu wird zunächst ein RenderingHints-Objekt erzeugt. ein RenderingHints-Objekt ist eine Map, d. h. eine Tabelle aus Schlüssel-Werte-Paaren. Die Schlüssel sind die möglichen Einstellungen für das Rendering (bspw. KEY_ANTIALIASING), und der dazugehörige Wert ist entweder VALUE_ANTIALIASING_ON oder VALUE_ANTIALIASING_OFF, alles sind Konstanten, die in der Klasse RenderingHints definiert sind. Ein RenderingHints-Objekt kann mit der Nachricht addRenderingHints an den grafischen Kontext als Einstellung übergeben werden. Ein RenderingHint versteht auch die Nachricht add(), falls mehrere Rendering-Einstellungen gesetzt werden sollen.
Sollen die Kreise eine Transparenz aufweisen, d. h. sie sind durchscheinend, so ist dies über eine Einstellung des Composite-Objektes innerhalb des grafischen Kontextes zu erreichen. Das Composite-Objekt dient der Einstellung des Renderings, bei der Mischung der Farben verschiedener Objekte. Die Klasse, welche die Transparenz erzeugen kann ist ein spezielles Composite - ein AlphaComposite. Der Name stammt von dem Alpha-Wert, der die "Transparenz" von Pixeln angibt (0.0 -> unsichtbar, 1.0 -> undurchsichtig). AlphaComposite-Objekte implementieren alle Kompositionsregeln, die von T. Porter und T. Duff in "Compositing Digital Images" (SIGGRAPH 84, 253-259) veröffentlicht wurden.
Die Klasse AlphaComposite besitzt eine sog. Factory-Methode, die als statische Methode (also als Klassen-Methode) mit einem Objekt der Klasse antwortet. Die gemeinte Factory-Methode hat den Namen getInstance(...). Als Parameter wird die Kompositionsregel (hier SRC_OVER) und ein Alphawert übergeben. Ist der Alphawert kleiner als eins, so sind die gezeicheten Flächen ab sofort durchsichtig.
Graphics2D g2=(Graphics2D)...
RenderingHints hints=new
RenderingHints(RenderingHints.KEY_ANTIALIASING,Rendering
Hints.VALUE_ANTIALIAS_ON);
g2.addRenderingHints(hints);
Sollen die Kreise eine Transparenz aufweisen, d. h. sie sind durchscheinend, so ist dies über eine Einstellung des Composite-Objektes innerhalb des grafischen Kontextes zu erreichen. Das Composite-Objekt dient der Einstellung des Renderings, bei der Mischung der Farben verschiedener Objekte. Die Klasse, welche die Transparenz erzeugen kann ist ein spezielles Composite - ein AlphaComposite. Der Name stammt von dem Alpha-Wert, der die "Transparenz" von Pixeln angibt (0.0 -> unsichtbar, 1.0 -> undurchsichtig). AlphaComposite-Objekte implementieren alle Kompositionsregeln, die von T. Porter und T. Duff in "Compositing Digital Images" (SIGGRAPH 84, 253-259) veröffentlicht wurden.
Die Klasse AlphaComposite besitzt eine sog. Factory-Methode, die als statische Methode (also als Klassen-Methode) mit einem Objekt der Klasse antwortet. Die gemeinte Factory-Methode hat den Namen getInstance(...). Als Parameter wird die Kompositionsregel (hier SRC_OVER) und ein Alphawert übergeben. Ist der Alphawert kleiner als eins, so sind die gezeicheten Flächen ab sofort durchsichtig.
Graphics2D g2=(Graphics2D)...
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)0.4));
... link (0 Kommentare) ... comment
... older stories