Als GDI + herauskam, erinnere ich mich an all die Brouhaha darüber, wie es die "neue, schnellere, bessere" Art war, Dinge in Windows anzuzeigen. Aber jedes Mal, wenn ich es betrachtete, schien es mir, dass es wirklich nur ein COM-Wrapper um GDI war.
Stimmt das? Oder ist GDI + wirklich eine unabhängige grafische Bibliothek, die einfach einige Paradigmen mit GDI teilt?
Persönlich bin ich nicht sicher, wie es unabhängig sein könnte, aber ich sah nie eine bestimmte Aussage auf die eine oder andere Weise.
Viele GDI-Funktionen werden von der Grafikhardware beschleunigt, und einige GDI + -Routinen können GDI darunter verwenden. Aber die meisten von GDI + sind unabhängig von GDI.
Ein wichtiges und aussagekräftiges Beispiel ist das Text-Rendering. In GDI + -Text wird das Rendering komplett in Software durchgeführt; Das Anti-Aliasing, die Glyphen-Pixelanpassung und andere Effekte werden ohne die Videokarte durchgeführt.
alt text http://i.msdn.microsoft.com/ ms533818.fontstext10 (de-de, VS.85) .png
Chris Jackson von Microsoft hatte einen interessanten Blogbeitrag, in dem er die Geschwindigkeitsunterschied zwischen Textwiedergabe in GDI und GDI + :
... mein GDI-Code-Pfad wurde gerendert ungefähr 99.000 Glyphen pro Zweitens, während mein GDI + -Code-Pfad war Rendering ungefähr 16.000 Glyphen pro Sekunde.
Ein weiteres Beispiel ist die Linienzeichnung. GDI + unterstützt Anti-Aliasing-Linien- / Polygon- und Kreis- / Ellipsenzeichnung, während GDI nicht:
alt text http://i.msdn.microsoft.com/ ms536351.aboutgdip02_art33 (de-de, VS.85) .png alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art34(en-us,VS.85).png
alt text http://i.msdn.microsoft.com/ ms536351.aboutgdip02_art36 (de-de, VS.85) .png
GDI + baut auf GDI auf und fügt einige weitere Funktionen hinzu. GDI + fügt beispielsweise Unterstützung für Transparenz, Anti-Aliasing-Bitmap-Stretching usw. hinzu.
GDI + ist hauptsächlich eine objektbasierte API und GDI ist eine Funktion api. Die meisten Funktionalitäten in GDI + sind, im Gegensatz zu GDI, nicht hardwaremäßig optimiert (es gibt Software). In GDI wird BitBlt beispielsweise direkt von der Hardware verarbeitet. GDI + Bitmap-Malfunktionen sind nicht.
GDI + ist eine leistungsstarke API, aber seien Sie bei der Leistung vorsichtig.
GDI + ist in C ++, COM und .NET verfügbar.
GDI + ist nicht COM. GDI + hat eine zugrunde liegende "flache" API, die von C (oder einer anderen Sprache) aufgerufen werden kann, und einen objektorientierten Wrapper in C ++, der nur die flache API aufruft. Es gibt auch Wrapper in .NET (System.Drawing) und Delphi, die auch nur die flache API aufrufen. Es funktioniert völlig anders als GDI, da Sie keine Objekte (Stifte, Pinsel, Schriften) in einen Gerätekontext setzen, sondern sie an Zeichenfunktionen übergeben. Mit GDI hat es nicht viel gemein. Ich weiß zwar nicht, ob die Implementierung von GDI + GDI verwendet - aber wahrscheinlich nicht, weil es so viele Funktionen hat, die in GDI nicht verfügbar sind.
Leider ist es langsamer als GDI. Es ist jedoch sehr mächtig.
Wie Decasteljau in der Zwischenzeit angemerkt hat, könnten die Performance-Probleme von der Tatsache herrühren, dass es im Gegensatz zu OpenVG oder WPF nicht in Hardware gerendert wird. Ich habe XNA vor kurzem für eine grafische Echtzeitanwendung verwendet.