Schnittstelle für Grafikgeräte - Graphics Device Interface

Das Graphics Device Interface ( GDI ) ist eine Legacy-Komponente von Microsoft Windows, die für die Darstellung grafischer Objekte und deren Übertragung an Ausgabegeräte wie Monitore und Drucker verantwortlich ist . Windows-Apps verwenden die Windows-API für die Interaktion mit GDI für Aufgaben wie das Zeichnen von Linien und Kurven, das Rendern von Schriftarten und die Handhabung von Paletten . Das Windows USER- Subsystem verwendet GDI, um solche UI-Elemente wie Fensterrahmen und Menüs zu rendern. Andere Systeme haben Komponenten, die GDI ähnlich sind; Beispiel: macOS hat Quartz und das X Window System hat X.Org Server .

Die wichtigsten Vorteile von GDI gegenüber direkteren Zugriffsmethoden auf die Hardware sind vielleicht seine Skalierungsfähigkeiten und seine abstrakte Darstellung von Zielgeräten. Mit GDI ist es möglich, auf mehreren Geräten, wie einem Bildschirm und einem Drucker, zu zeichnen und in jedem Fall eine ordnungsgemäße Wiedergabe zu erwarten. Diese Funktion steht im Mittelpunkt der meisten " What You See Is What You Get "-Anwendungen für Microsoft Windows.

Einfache Spiele, die kein schnelles Grafik-Rendering erfordern, können GDI verwenden. GDI ist jedoch für fortgeschrittene Animationen relativ schwer zu verwenden, es fehlt eine Idee zum Synchronisieren mit einzelnen Videoframes in der Grafikkarte und es fehlt die Hardware- Rasterisierung für 3D. Moderne Spiele verwenden stattdessen normalerweise DirectX , Vulkan oder OpenGL .

Technische Details

In GDI definiert ein Gerätekontext (DC) die Attribute von Text und Bildern für das Ausgabegerät, zB Bildschirm oder Drucker. GDI hält den aktuellen Kontext aufrecht. Das Generieren der Ausgabe erfordert ein Handle für den Gerätekontext (HDC). Nach dem Generieren der Ausgabe konnte das Handle freigegeben werden.

GDI verwendet den Strichzeichnungsalgorithmus von Bresenham, um Alias-Linien zu zeichnen.

Versionsgeschichte

Frühe Versionen

GDI war in der ersten Version von Windows vorhanden. Bisher hatten MS-DOS-Programme die Grafikhardware durch Software-Interrupts (manchmal über das Video-BIOS ) und durch direkte Manipulation des Videospeichers manipuliert . Auf diese Weise geschriebener Code erwartet, dass er der einzige Benutzer des Videospeichers ist, der in einer Multitasking -Umgebung wie Windows nicht haltbar war . Das BYTE- Magazin diskutierte im Dezember 1983 Microsofts Pläne für ein System zur Ausgabe von Grafiken auf Druckern und Monitoren mit demselben Code in der bevorstehenden ersten Version von Windows.

Windows XP

Mit der Einführung von Windows XP , GDI + ergänzt GDI. GDI+ wurde in C++ geschrieben. Es fügt Anti-Aliasing 2D-Grafiken, Gleitkommakoordinaten, Farbverlaufsschattierung, komplexere Pfadverwaltung, intrinsische Unterstützung für moderne Grafikdateiformate wie JPEG und PNG und Unterstützung für die Komposition affiner Transformationen in der 2D-Ansichtspipeline hinzu. GDI+ verwendet RGBA- Werte, um Farben darzustellen. Die Verwendung dieser Funktionen ist in Windows XP-Komponenten wie Microsoft Paint , Windows Bild- und Faxanzeige , Fotodruck-Assistent und dem Bildschirmschoner Eigene Bilder-Diashow offensichtlich. Ihr Vorhandensein in der grundlegenden Grafikschicht vereinfacht die Implementierung von Vektorgrafiksystemen wie Adobe Flash oder SVG erheblich . Außerdem bietet .NET Framework eine verwaltete Schnittstelle für GDI+ über den System.Drawing Namespace .

Während GDI+ in Windows XP und höher enthalten ist, kann die dynamische GDI+-Bibliothek auch mit einer Anwendung geliefert und unter älteren Windows-Versionen verwendet werden.

Aufgrund der zusätzlichen Fähigkeiten zur Textverarbeitung und Auflösungsunabhängigkeit in GDI+ übernimmt die CPU das Text-Rendering. Das Ergebnis ist eine Größenordnung langsamer als die hardwarebeschleunigte GDI. Chris Jackson veröffentlichte einige Tests, die zeigten, dass ein von ihm geschriebener Text-Rendering-Code 99.000 Glyphen pro Sekunde in GDI rendern konnte, aber derselbe Code mit GDI+ 16.600 Glyphen pro Sekunde.

GDI+ ähnelt (in Zweck und Struktur) dem QuickDraw GX- Subsystem von Apple und den Open-Source- Bibliotheken libart und Cairo .

Windows Vista

In Windows Vista werden alle Windows-Anwendungen, einschließlich GDI- und GDI+-Anwendungen, in der neuen Compositing-Engine Desktop Window Manager (DWM) ausgeführt, die hardwarebeschleunigt ist. Daher ist die GDI selbst nicht mehr hardwarebeschleunigt. Aufgrund der Beschaffenheit der Kompositionsvorgänge können Fensterbewegungen schneller oder reaktionsschneller sein, da der zugrunde liegende Inhalt von der Anwendung nicht erneut gerendert werden muss.

Windows 7

Windows 7 enthält GDI-Hardwarebeschleunigung für Blitting- Vorgänge im Windows- Anzeigetreibermodell v1.1 . Dies verbessert die GDI-Leistung und ermöglicht es DWM, lokalen Videospeicher für das Compositing zu verwenden, wodurch der Systemspeicherbedarf verringert und die Leistung von Grafikvorgängen erhöht wird. Die meisten primitiven GDI-Operationen sind im Gegensatz zu Direct2D immer noch nicht hardwarebeschleunigt . GDI+ setzt weiterhin auf Software-Rendering in Windows 7.

GDI-Drucker

Ein GDI-Drucker oder Winprinter (analog zu einem Winmodem ) ist ein Drucker, der die Ausgabe von einem Host-Computer akzeptiert, auf dem Windows ausgeführt wird. Der Host-Computer führt die gesamte Druckverarbeitung durch: GDI rendert eine Seite als Bitmap, die der Druckertreiber empfängt, verarbeitet und an den zugehörigen Drucker sendet. Die Kombination von GDI und Treiber ist bidirektional; Sie erhalten Informationen vom Drucker, z. B. ob der Drucker druckbereit ist oder kein Papier mehr vorhanden ist.

Drucker, die nicht auf GDI angewiesen sind, benötigen Hardware, Firmware und Speicher für das Seitenrendering, während ein GDI-Drucker dafür den Hostcomputer verwendet. Ein Drucker mit eigener Steuersprache kann jedoch Eingaben von jedem Gerät mit einem geeigneten Treiber akzeptieren, während ein GDI-Drucker einen PC mit Windows erfordert. GDI-Drucker können Computern in einem Netzwerk zur Verfügung gestellt werden, wenn sie als freigegebene Drucker auf einem Computer verbunden sind, auf dem Windows ausgeführt wird. Einige "generische" GDI-Treiber pnm2ppawurden geschrieben; Sie zielen darauf ab, GDI-Drucker mit Nicht-Windows-Betriebssystemen wie FreeBSD kompatibel zu machen , aber sie können nicht alle Drucker unterstützen.

Um eine einfachere Erstellung von Treibern für Winprinter zu ermöglichen, wurde der Microsoft Universal Printer Driver erstellt. Auf diese Weise können Druckerhersteller Generic Printer Description (GPD)-"Minitreiber" schreiben, die die Fähigkeiten und den Befehlssatz des Druckers im Klartext beschreiben, anstatt Treiber im Kernelmodus entwickeln zu müssen.

Microsoft hat sich mit der Open XML Paper Specification von diesem Druckmodell entfernt .

Einschränkungen

Jedes Fenster verbraucht GDI-Objekte. Mit zunehmender Komplexität des Fensters und zusätzlichen Funktionen wie Schaltflächen und Bildern steigt auch die Verwendung von GDI-Objekten. Wenn zu viele Objekte verwendet werden, kann Windows keine weiteren GDI-Objekte zeichnen, was zu fehlerhafter Software und eingefrorenen und nicht reagierenden Programmabläufen führt. Viele Anwendungen sind auch falsch codiert und geben GDI-Objekte nach der Verwendung nicht frei, was das Problem weiter verschärft. Die insgesamt verfügbaren GDI-Objekte variieren von einer Windows-Version zur nächsten: Windows 9x hatte ein Limit von insgesamt 1.200 Objekten; Windows 2000 hat ein Limit von 16.384 Objekten; und Windows XP und höher haben ein konfigurierbares Limit (über die Registrierung), das standardmäßig auf 10.000 Objekte pro Prozess festgelegt ist (aber ein theoretisches Maximum von 65.536 für die gesamte Sitzung). Windows 8 und höher erhöhen das GDI-Objektlimit auf 65.536 pro Benutzeranmeldesitzung.

Frühere Versionen von Windows wie Windows 3.1 und Windows 98 enthielten ein Resource Meter-Programm, um dem Benutzer zu ermöglichen, zu überwachen, wie viel der gesamten GDI-Ressourcen des Systems verwendet wurden. Dieser Ressourcenzähler verbrauchte selbst GDI-Objekte. Spätere Versionen wie Windows 2000 und Windows XP können die Verwendung von GDI-Objekten für jedes Programm im Task-Manager melden, aber sie können dem Benutzer nicht die verfügbare GDI-Gesamtkapazität mitteilen.

Eine überlaufende GDI-Kapazität kann sich auf Windows selbst auswirken und das Öffnen neuer Fenster, das Anzeigen von Menüs und das Anzeigen von Warnfeldern verhindern. Die Situation kann schwer zu klären sein und kann möglicherweise ein erzwungenes Zurücksetzen des Systems erfordern, da es die Funktion von Kernsystemprogrammen verhindert. In Windows 8 und 8.1 erfolgt eine erzwungene Abmeldung als Folge eines GDI-Kapazitätsüberlaufs anstelle eines Neustarts.

Nachfolger

Direct2D ist der Nachfolger von GDI und GDI+. Sein Geschwister DirectWrite ersetzt Uniscribe . Sie wurden mit Windows 7 und Windows Server 2008 R2 geliefert und waren für Windows Vista und Windows Server 2008 (mit installiertem Platform Update) verfügbar. Später entwickelte Microsoft Win2D , eine kostenlose und Open-Source- GDI-ähnliche Klassenbibliothek. Die Zielgruppe von Win2D sind Entwickler, die C++, C# und Visual Basic.NET verwenden, um Apps für die universelle Windows-Plattform zu entwickeln .

Siehe auch

Hinweise und Referenzen

Externe Links