Vor- und Nachteile vo GDI
-
Hallo allerseits!
Ich kenne ich bisher leider noch nicht so richtig mit Grafikprogrammierung
aus, entnehme aber vielen Threads hier im Forum das GDI von den meisten
verschmäht wird.Gibt es dafür besondere Gründe? Wofür ist GDI denn geeignet? Oder was sind
die großen Vor- bzw. Nachteile von GDI?Schon mal besten Dank im Vorhinein....
-
Also bei normalen Grafikanwendungen reicht eigentlich die GDI bzw. die neue und bessere GDI+. Für Animationen und ähnliche kritsch performante Anwendungen, Spiele usw. ist DirectGraphics (ab DirectX8.0) geeignet.
GDI wird von mir persönlich nicht bevorzugt, da es einfach viel zu kompliziert zu handhaben ist und man dabei auch viele Fehler machen kann. Deshalb hat MS auch die GDI+ rausgebracht, welche nicht nur viel umfangreicher ist, sondern auch seeehr viel einfacher zu handhaben und verstehen ist. Es ist total anders konzipiert, da wohl jeder die alte GDI hasst.
Wenn du kein Spiel entwickeln willst, dann rate ich dir die GDI Plus zu nutzen(ab WinXP serienmäßig dabei, für ältere Win-Versionen gibts die DLL von MS kostenlos). Man kommt mit der GDI+ sehr schnell zu ersten Ergebnissen, klasse.
Die GDI/GDI+ ist auch dazu geeignet die Ausgabe auf den Drucker umzuleiten, auch auf Fax usw. D.h. die GDI kennt in dem Sinne keinen "Bildschirm", alle Ausgabegeräte werden neutral behandelt und ist somit für diese Gebiete unerlässlich.
DirectGraphics/3d dagegen greift direkt auf die Grafikkarte zu und ist somit sehr schnell in der Grafikdarstellung. Das ist der Vorteil von DX gegenüber GDI.
[ Dieser Beitrag wurde am 27.09.2002 um 12:17 Uhr von Artchi editiert. ]
[ Dieser Beitrag wurde am 27.09.2002 um 12:20 Uhr von Artchi editiert. ]
-
@Artchi
Nur weil man weniger Codezeilen braucht und einen höheren Funktionsumfang hat, heisst es noch lange nicht, dass es schlechter sein muss.
Nachteile der GDI+:
- langsamer als langsam
- sämtliche Koordinaten, die von Fenstern kommen, müssen nach float umgerechnet werden
- schlecht für das Zeichnen in Schleifen, da jedesmal das neue Objekt selektiert und wieder deselektiert werden muss
- GDI+ nutzt nur GDI, d.h. intern müssen die float-Koordinaten wieder nach int umgerechnet werden, um sie dem GDI übergeben zu können
-
Artchi:
Muß dich ein wenig korregieren.
Die GDI ist generell für die Ausgabe zuständig und nicht nur für Drucker.
Man übergibt der GDI das gezeichnete und diese wiederum an den Treiber. Ob jetzt Drucker oder was auch immer ist damit egal.
Im Grunde war es von dir richtig aber für Anfänger etwas verwierend
-
@Rene: das die GDI bzw. GDI+ nicht sehr schnell sind, ist doch irgednwie zweitrangig? Mit der GDI+ kommt man jedenfalls viel schneller zu Ergebnissen (beim Programmieren meine ich!) weil es halt einfacher zu verstehen und durchschauen ist. Und wer Speed braucht, der hat ja wie von mir gesagt DirectX als Option. Für jeden Anwendungsfall gibts die passende Technik, und die muß sich jeder selbst aussuchen. Wer nur ein paar Kreise und kleine unspektakuläre Bitmaps auf dem Fenster ausgeben will, ist mit GDI oder GDI+ nicht falsch bedient.
-
@Artchi
Darum geht es doch gar nicht!Wie z.B. zeichnest Du eine Linie in DirectDraw und wie im GDI ??
Wenn DirectDraw dann Hole DC von DirectDrawSurface
BenutzeGDIFunktionen MoveTo/LineToUnd hier liegt der Hase begraben! Denn: Line aus GDI+ ist sehr viel langsamer als MoveTo/LineTo
P.S.
Habe mal ne Cad-Anwendung mit MFC geschrieben, welche mehrere hundert Linien mit dem gleichen Stift zeichnen mußte. Nach Einsatz von GDI+ dauerte das ganze einige Male länger und jedes Update flimmerte