Linien

Eine Linie ist eine Gruppe hervorgehobener Pixel auf einer Rasteranzeige (oder eine Reihe von Punkten auf einer gedruckten Seite), die durch zwei Punkte gekennzeichnet sind: einen Startpunkt und einen Endpunkt. Das Pixel, das sich am Startpunkt befindet, ist immer in der Zeile enthalten, und das Pixel, das sich am Endpunkt befindet, wird immer ausgeschlossen. (Diese Art von Zeile wird manchmal auch als inklusive-exklusiv bezeichnet.)

Wenn eine Anwendung eine der Linienzeichnungsfunktionen aufruft, legt die Grafikgeräteschnittstelle (Graphics Device Interface, GDI) oder in einigen Fällen einen Gerätetreiber fest, welche Pixel hervorgehoben werden sollen. GDI ist eine DLL (Dynamic Link Library), die Aufrufe von Grafikfunktionen von einer Anwendung verarbeitet und diese Aufrufe an einen Gerätetreiber weitergibt. Ein Gerätetreiber ist eine DLL, die Eingaben von GDI empfängt, die Eingabe in Gerätebefehle konvertiert und diese Befehle an das entsprechende Gerät übergibt. GDI verwendet ein digitales Differenzanalysetool (Digital Differential Analyzer, DDA), um den Satz von Pixeln zu bestimmen, die eine Linie definieren. Ein DDA bestimmt den Pixelsatz, indem jeder Punkt auf der Linie untersucht und die Pixel auf der Anzeigeoberfläche (oder Punkte auf einer gedruckten Seite) identifiziert werden, die den Punkten entsprechen. Die folgende Abbildung zeigt eine Linie, ihren Ausgangspunkt, ihren Endpunkt und die Pixel, die mithilfe eines einfachen DDA hervorgehoben werden.

Abbildung eines Rasters von Pixeln, Start- und Endpunkten, einer Linie und einer Schattierung auf den Pixeln, die entlang der Linie liegen

Der einfachste und gebräuchlichste DDA ist der Bresenham-DDA oder inkrementell. Eine geänderte Version dieses Algorithmus zeichnet Linien in Windows. Der inkrementelle DDA ist für seine Einfachheit bekannt, aber es wird auch für seine Ungenauigkeit erwähnt. Da er auf den nächsten ganzzahligen Wert abgerundet wird, kann er manchmal nicht die ursprüngliche Zeile darstellen, die von der Anwendung angefordert wurde. Der von GDI verwendete DDA rundet nicht auf die nächste ganze Zahl ab. Daher erzeugt dieser neue DDA eine Ausgabe, die manchmal viel näher an der ursprünglichen Zeile liegt, die von der Anwendung angefordert wurde.

Hinweis

Wenn eine Anwendung eine Zeilenausgabe benötigt, die mit dem neuen DDA nicht erreicht werden kann, kann sie ihre eigenen Linien zeichnen, indem sie die LineDDA-Funktion aufruft und einen privaten DDA (LineDDAProc) bereitstellt. Die LineDDA-Funktion zeichnet Linien jedoch viel langsamer als die Linienzeichnungsfunktionen. Verwenden Sie diese Funktion nicht in einer Anwendung, wenn die Geschwindigkeit im Vordergrund steht.

 

Eine Anwendung kann den neuen DDA verwenden, um einzelne Linien und mehrere verbundene Liniensegmente zu zeichnen. Eine Anwendung kann eine einzelne Linie zeichnen, indem sie die LineTo-Funktion aufruft . Diese Funktion zeichnet eine Linie von der aktuellen Position bis zu einem angegebenen Endpunkt, aber nicht einschließlich. Eine Anwendung kann eine Reihe verbundener Liniensegmente zeichnen, indem sie die Polyline-Funktion aufruft und ein Array von Punkten bereitstellt, die den Endpunkt jedes Liniensegments angeben. Eine Anwendung kann mehrere, getrennte Reihen verbundener Liniensegmente zeichnen, indem sie die PolyPolyline-Funktion aufruft und die erforderlichen Endpunkte liefert.

Die folgende Abbildung zeigt die Zeilenausgabe, die durch Aufrufen der Funktionen LineTo, Polyline und PolyPolyline erstellt wird.

Abbildung, die eine gerade Linie, ein