AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia GDI, GDI+ oder doch Direct2D?
Thema durchsuchen
Ansicht
Themen-Optionen

GDI, GDI+ oder doch Direct2D?

Ein Thema von Jazzman_Marburg · begonnen am 12. Mai 2011 · letzter Beitrag vom 6. Nov 2022
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 11:10
Hallo Graphik-Experten!
Irgendwie komme ich gedanklich an folgender Frage nicht weiter -- und das große Internet hat mich jetzt mehr verwirrt als das es geholfen hat. Mein Anliegen:
Die Applikation soll
  • Grafiken (BMP, JPG oder PNG) laden
  • sie anzeigen
  • User kann die Farbe der Grafik ändern können
  • die Grafik soll im Ursprungstyp (BMP, JPG oder PNG) gespeichert werden.
Jetzt dachte ich, ich erstelle für jeden Grafik-Typ ein entsprechendes Objekt:
  • if graphtype = 'PNG' then myGraph := TPngImage.Create;
  • if graphtype = 'BMP' then myGraph := TBitmap.Create;
  • if graphtype = 'JPG' then myGraph := TJpeg.Create;
Für das Anzeigen der Grafik, dachte ich, muß ich die Grafik einem TImage übergeben:
  • bmp := TBitmap.Create;
  • bmp.width := myGraph.width;
  • bmp.height:= myGraph.height;
  • bmp.canvas.draw(myGraph,0,0);
Nach der Änderung durch den User, speicher ich die Grafik wieder im Ursprungs-Typ:
  • myGraphOut : TGraphics
  • myGraphOut.width := bmp.width;
  • myGraphOut.canvas.draw(bmp);
  • myGraphOut.savetofile(whatever)

Jetzt kommen wir zum Casus-Knacktus:
Wenn ich doch intern Alles, was da kommt in ein BMP verwandle, dann habe ich doch mindestens das Problem, dass z.B. der Alpha-Channel des PNG futsch ist. Das kann also nicht das gelbe vom Ei sein.
Zugegebenermaßen, habe ich in der EmBa-Newsgroup eine hähnliche Frage gestellt, und dort wurde mir dann GDI+ empfohlen. Ich kenne mich GDI+ nicht aus, aber wieso sollte das die Lösung sein?
Und vor allem: Die Applikation soll nur auf Win7 laufen -- dann könnte ich ja gleich Direct2D nutzen, oder?

Das alles klingt vielleicht komplizierter als es vielleicht wirklich ist (anzeigen, ändern, speichern) -- aber ich bin nun wirklich verwirrt, was ein gangbarer Weg zu dieser kleinen Applikation ist.

Könnt ihr helfen?

Vielen Dank
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 11:46
Hallo,

kurz vorneweg, ich kenne mich bisher mit Direct2D nicht aus, kann dazu also nichts sagen.
Ich kann Dir aber sagen, dass GDI+ geeignet für Dein Vorhaben ist. Und zwar einfach, weil GDI+ verschiedene Graphikformate unterstützt, unter anderem auch PNG. Das Schöne dabei ist, dass Du immer nur mit einem Objekt "Image" arbeitest, in dem dann die verschiedenen Formate drinstecken. Außerdem hast Du natürlich viel mehr Funktionen (Transparenz, Antialiasing, Pfade...).

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#3

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 12:49
Dankeschön für die klare Aussage!

Die Hinweise verdichten sich also zu: GDI+

Habe damit zwar noch nie etwas gemacht, aber es scheint die richtige Grafik-Umgebung für mein Vorhaben.

Vielen Dank!

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 14:13
Die Hinweise verdichten sich also zu: GDI+
Jupp.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 14:47
Nein, beim laden in die TBitmap geht der alphachannel nicht verloren.

Einfach vorm laden PixelFormat auf pf32Bit stellen.

Es ist halt nur so, dass nicht alle funktionen in delphi den alphachannel berücksichtigen(beim zeichnen).

Wenn du beim zeichnen sicher gehen willst, nimmste einfach AlphaBlend (api funktion).

(damit hab ich schon unter D7 mit 32bit bitmaps alphatransparenz gezeichnet(per pixel).

MFG
Memnarch
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#6

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 15:18
OpenGL im 2D-Modus könntest du auch noch benutzen. Da kannst du dann auch noch so schöne Dinge machen wie Skalierung, Verzerrung usw.
Allerdings müsstest du dann für die verschiedenen Formate noch zusätzliche Loader einbinden.

GDI+ kann schon alle (auf Windows gängigen) Formate von Haus aus und kann Skalierung, Verzerrung, Drehung & Co. ebenso gut.
Nachteil an GDI+: Es ist schweinelangsam verglichen mit OpenGL oder Direct2D.

Für deinen Zweck sollte die GDI+ jedoch die beste Wahl.
Du könntest einerseits die Farbe Pixel für Pixel ändern - oder aber eine halbtransparente Schicht drüberlegen - dank ARGB ganz einfach.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 15:50
GDI+ kann alles, was GDI auch schon kann und noch ein paar Extras. Außerdem hast du nicht die Probleme mit den Delphi-Typen ala TBitmap, TJPEGImage, TPNGImage, TGifImage, ... (siehe Vorredner). Weiterhin ist es mit GDI+ möglich, alle vorhandenen Operationen auf alle unterstützten Graphiktypen anzuwenden. Die Delphi-Typen werfen in solch einem Fall schon mit Fehlermeldungen um sich, wenn man nicht am TBitmap rumschrauben will.

Das GDI+ langsam sein soll, kann ich jetzt nicht bestätigen, da ich a) nicht weiß, wie schnell OpenGL und Direct3D sind, b) in der VM keine 3D-Graphikunterstützung habe und c) das ganze noch nicht im Batch-Modus ausprobiert habe. Es kommt halt auf das erwartete Tempo an.

Nachteil: Du solltest nicht TImage als visuelle Komponente verwenden, sondern dir einen eigenen Image-Container schreiben, da sonst z.B. der Alpha-Kanal nicht beachtet wird (TImage => Bitmap).

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#8

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 16:31
@Rollstuhlfaherer: GDI/GDI+ -> CPU
OpenGL/Direct3D -> GPU

Daher auch in erster Linie der geschwindigkeitsunterschied.
Wieweit man GDi/GDI+ optimieren könnte, sei dahin gestellt.


MFG
Memnarch
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#9

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 16:37
@Rollstuhlfaherer: GDI/GDI+ -> CPU
OpenGL/Direct3D -> GPU
Nun ja, das merkt man wohl auch nur, wenn man Hardwarebeschleunigung aktiv hat, was bei mir definitiv nicht der Fall ist. Bei mir läuft beides auf der CPU.

Grund: Der GraKa-Treiber und mein Ubuntu vertragen sich nicht.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#10

AW: GDI, GDI+ oder doch Direct2D?

  Alt 12. Mai 2011, 19:12
Du solltest nicht TImage als visuelle Komponente verwenden, sondern dir einen eigenen Image-Container schreiben, da sonst z.B. der Alpha-Kanal nicht beachtet wird (TImage => Bitmap).
Wieso denn das? Selbstverständlich kann TImage in Zusammenarbeit mit TPNGImage Transparenz darstellen!
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz