Linien

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

Wenn eine Anwendung eine der Strichzeichnungsfunktionen aufruft, bestimmt die Grafikgeräteschnittstelle (Graphics Device Interface, GDI) oder in einigen Fällen ein Gerätetreiber, welche Pixel hervorgehoben werden sollen. GDI ist eine Dll (Dynamic Link Library), die Grafikfunktionsaufrufe von einer Anwendung verarbeitet und diese Aufrufe an einen Gerätetreiber übergibt. 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 differenzielles Analysetools (Digital Differential Analyzer, DDA), um den Satz von Pixeln zu bestimmen, die eine Linie definieren. Ein DDA bestimmt den Satz von Pixeln, indem jeder Punkt in 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 Startpunkt, ihren Endpunkt und die durch eine einfache DDA hervorgehobenen Pixel.

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

Die einfachste und gängigste DDA ist bresenham oder inkrementelle DDA. Eine geänderte Version dieses Algorithmus zeichnet Linien in Windows. Das inkrementelle DDA wird aus Gründen der Einfachheit, aber auch aufgrund seiner Ungenauigkeit erwähnt. Da sie auf den nächsten ganzzahligen Wert abrundet, kann sie manchmal nicht die ursprüngliche Zeile darstellen, die von der Anwendung angefordert wurde. Die von GDI verwendete DDA rundet nicht auf die nächste ganze Zahl ab. Daher erzeugt diese neue DDA-Ausgabe eine Ausgabe, die manchmal deutlich näher an der ursprünglichen Zeile liegt, die von der Anwendung angefordert wurde.

Hinweis

Wenn eine Anwendung eine Zeilenausgabe erfordert, die mit der neuen DDA nicht erreicht werden kann, kann sie ihre eigenen Linien zeichnen, indem sie die LineDDA-Funktion aufruft und eine private DDA (LineDDAProc)angibt. Allerdings zeichnet die LineDDA-Funktion Linien viel langsamer als die Strichzeichnungsfunktionen. Verwenden Sie diese Funktion nicht innerhalb einer Anwendung, wenn die Geschwindigkeit ein hauptanliegend ist.

Eine Anwendung kann die neue DDA verwenden, um einzelne Linien und mehrere verbundene Liniensegmente zu zeichnen. Eine Anwendung kann eine einzelne Zeile 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 von verbundenen Liniensegmenten zeichnen, indem sie die Polyline-Funktion aufruft und ein Array von Punkten angibt, die den Endpunkt jedes Liniensegments angeben. Eine Anwendung kann mehrere, unzusammenhängende 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, Polylineund PolyPolyline erstellt wurde.

Abbildung mit einer geraden Linie, einem "l"-förmigen Feld und zwei dreidimensionalen Formen