Teilen über


Linien

Eine Linie ist ein Satz hervorgehobener Pixel auf einer Rasteranzeige (oder einer Reihe von Punkten auf einer gedruckten Seite), die durch zwei Punkte identifiziert werden: einen Ausgangspunkt 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 inklusive exklusiv bezeichnet.)

Wenn eine Anwendung eine der Linienzeichnungsfunktionen 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 Dynamic Link Library (DLL), 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 einen digitalen Differenzanalysewert (Digital Differential Analyzer, DDA), um den Satz von Pixeln zu bestimmen, der eine Linie definiert. Ein DDA bestimmt den Satz von Pixeln, indem jeder Punkt auf der Linie untersucht und diese 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 einer einfachen DDA hervorgehoben werden.

Abbildung mit einem Raster mit Pixeln, Anfangs- und Endpunkten, einer Linie und Schattierung auf den Pixeln, die sich entlang der Linie befinden,

Die einfachste und am häufigsten verwendete DDA ist der Bresenham oder inkrementelle DDA. Eine geänderte Version dieses Algorithmus zeichnet Linien in Windows. Der inkrementelle DDA ist aufgrund seiner Einfachheit bekannt, aber es ist auch für seine Ungenauigkeit bekannt. Da sie auf den nächsten ganzzahligen Wert gerundet wird, kann die ursprüngliche Zeile, die von der Anwendung angefordert wird, manchmal nicht dargestellt werden. Die 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 ist, die von der Anwendung angefordert wird.

Anmerkung

Wenn eine Anwendung eine Leitungsausgabe erfordert, die nicht mit dem neuen DDA erreicht werden kann, kann sie eigene Linien zeichnen, indem sie die LineDDA--Funktion aufruft und eine private DDA (LineDDAProc) liefert. Die LineDDA--Funktion zeichnet jedoch Linien viel langsamer als die Linienzeichnungsfunktionen. 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 hin zu einem angegebenen Endpunkt, jedoch nicht einschließlich eines angegebenen Endpunkts. Eine Anwendung kann eine Reihe verbundener Liniensegmente zeichnen, indem die Polyline--Funktion aufgerufen wird und ein Array von Punkten bereitgestellt wird, die den Endpunkt jedes Liniensegments angeben. Eine Anwendung kann mehrere, nicht zusammenhängende Reihen verbundener Liniensegmente zeichnen, indem sie die PolyPolyline--Funktion aufrufen und die erforderlichen Endpunkte bereitstellen.

Die folgende Abbildung zeigt die Zeilenausgabe, die durch Aufrufen der funktionen LineTo, Polyline-und PolyPolyline- erstellt wurde.

Abbildung mit einer geraden Linie, einem