2009-07-09 4 views
8

Als GDI + herauskam, erinnere ich mich an all die Brouhaha darüber, wie es war die "neue, schnellere, bessere" Möglichkeit, Sachen in Windows anzuzeigen. Aber jedes Mal, wenn ich es mir ansah, schien es mir, dass es nur ein COM-Wrapper um GDI war.Ist GDI + nur eine Ebene über GDI oder etwas Neues?

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.

Antwort

7

Viele GDI-Funktionen werden von der Grafikhardware beschleunigt, und einige GDI + -Routinen verwenden möglicherweise GDI darunter. Aber der größte Teil von GDI + ist 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(en-us,VS.85).png

Chris Jackson Microsoft hatte eine interessante Blog-Post, wo er die speed difference between text rendering in GDI and GDI+ Profil:

... mein GDI Codepfad wurde Rendering etwa 99.000 Glyphen pro Sekunde, während meiner GDI + -Code Pfad war Rendering ca. 16.000 Glyphen pro Sekunde.

Ein anderes Beispiel ist Strichzeichnung.GDI + unterstützt Anti-Aliasing Linie/Polygon und Kreis/Ellipse zeichnen, während GDI nicht:

alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art33(en-us,VS.85).pngalt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art34(en-us,VS.85).png

alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art36(en-us,VS.85).png

+3

Aber um Ihre Frage zu beantworten mehr direkt: GDI + ist komplett neu. Dies wird tatsächlich zu einem Problem, da es langsamer ist als GDI (d. H. Nicht hardwarebeschleunigt), und das Text-Rendering unterscheidet sich von GDI (was zu Text führt, der in verschiedenen Teilen einer .NET-Anwendung anders aussehen kann). Es ist kein COM-Wrapper um GDI, es ist sogar nicht COM. Es ist flaches CAPI. Microsoft hat eine Reihe von C++ - Klassen erstellt, die das Aufrufen der Flat-Funktionen vereinfachen. 'System.Drawing' in .NET ist eine Menge von Klassen, die auch die flachen Funktionen aufrufen. –

9

GDI + ist über GDI gebaut und fügt einige weitere Funktionen hinzu. Beispielsweise fügt GDI + 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 vorsichtig mit ihrer Leistung.

GDI + ist in C++, COM und .NET

8

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 darauf hingewiesen hat, können die Leistungsprobleme 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.