Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GDI, GDI+ oder doch Direct2D? (https://www.delphipraxis.net/160428-gdi-gdi-oder-doch-direct2d.html)

rollstuhlfahrer 12. Mai 2011 19:47

AW: GDI, GDI+ oder doch Direct2D?
 
Gut, dann änder ich mal schnell meine Begründung: TImage ist zwar toll, aber es kann nicht mit GDI+ zusammen arbeiten. Dazu muss man zuerst das Bild in ein Delphi-kompatibles Format bringen und kann es erst dann anzeigen. Da GDI+ selber zeichnen kann, würde ich diese Zeichenroutinen bevorzugen.

Zitat:

Zitat von Thom (Beitrag 1100506)
Selbstverständlich kann TImage in Zusammenarbeit mit TPNGImage Transparenz darstellen!

Ist mir auch wieder eingefallen, dass das mit den PNG-Komponenten geht.

Bernhard

Thom 12. Mai 2011 21:23

AW: GDI, GDI+ oder doch Direct2D?
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1100508)
TImage ist zwar toll, aber es kann nicht mit GDI+ zusammen arbeiten.

:gruebel: Tut mir leid, wenn ich wieder herumnörgle - aber das geht sehr wohl (Voraussetzung: Image1 enthält ein PNG-Bild):
Delphi-Quellcode:
uses
  ..., GDIPAPI, GDIPObj, GDIPUTIL;

//...

procedure TForm1.Button1Click(Sender: TObject);
var
  Graphics : TGPGraphics;
  Brush: TGPSolidBrush;
begin
  Graphics:=TGPGraphics.Create(TPNGImage(Image1.Picture.Graphic).Canvas.Handle);
  try
    Brush:=TGPSolidBrush.Create(MakeColor(128,255,0,0)); //Alpha=128 entspricht 50%!!!
    try
      Graphics.FillRectangle(Brush,10,10,20,20);
    finally
      Brush.Free;
    end;
  finally
    Graphics.Free;
  end;
  Image1.Invalidate;
end;

implementation 13. Mai 2011 07:08

AW: GDI, GDI+ oder doch Direct2D?
 
[OT]
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1100467)
Grund: Der GraKa-Treiber und mein Ubuntu vertragen sich nicht.

Oh, was hast'n du für 'ne GraKa? Unter meinem läuft alles wunderbar, auch inner Virtualbox mit Windows drin.
[/OT]

christian.noeding 9. Jul 2012 08:16

AW: GDI, GDI+ oder doch Direct2D?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,


ich kram diesen Thread aus dem Mai noch einmal hervor, da hier noch Fragen unbeantwortet sind, welche mich aber derzeit ebenfalls beschäftigen und dieser Thread über die Suche einem entgegenspringt :). Die Ursprüngliche Frage war ja: GDI, GDI+ oder Direct2D (per TDirect2DCanvas)?

Die Infos im Netz verwirren hauptsächlich, da jeder eine Meinung hat (schön), die aber meist das Gegenteil der anderen Meinung darstellt (das ist nicht so schön *g*). Nun die Frage: Kann mir jemand eine Aussage geben, welche Zeichen-Methode die optimale Lösung ist, um bei Windows 7 mit Hardwarebeschleunigung eine Oberfläche zu zeichnen? Unter "Oberfläche" verstehe ich:
  • PNG-Bilder einfügen (per Maus verschiebbar - ähnlich Windows-Desktop)
  • Text zeichnen
  • Linien zeichnen und diese möglichst schnell aktualisieren (für Statusanzeigen)
Ein Beispiel meiner aktuellen Implementierung mit GDI (ohne Plus) findet man im Anhang. Es handelt sich um die grafische Darstellung meines Lichtprogramms. Alle Elemente werden live gezeichnet.

  • GDI (ohne Plus) wird ja wohl bei Windows 7 nicht mehr per Hardware beschleunigt. Ich hab da aber auch unter XP aufgrund vieler PNG-Bilder meist nur mit 15 FPS gearbeitet, damit die CPU-Auslastung durch das Repainting nicht zu hoch wird (BitBlt).
  • GDI+ soll ja unter Windows7 wieder Hardwarebeschleunigt sein. (SynGDIPlus-OpenSource Methode, um TCanvas mit GDI+ zu zeichnen - ist das sinnvoll und performant?)
  • Mit TDirect2DCanvas hab ich noch keine Erfahrung.

Hier noch eine Quelle, wo auch (eher ergebnislos) zwischen Direct2DCanvas und GDI+ diskutiert wurde: Chris Bensen Blog: TDirect2DCanvas-Performance

Noch einmal: was wäre die optimale Zeichenmethode, um möglichst schnell mit oben angegebenen Voraussetzungen zu zeichnen?


vielen Dank,
Christian :wink:

EWeiss 9. Jul 2012 08:49

AW: GDI, GDI+ oder doch Direct2D?
 
Was spricht gegen eine kombination von GDI+ und OpenGL ?
Ich mach nichts anderes und läuft hervorragend.
Was die Hardware beschleunigung angeht.. na ja und das andere halt auch.

Transparentes OpenGL Fenster in verbindung mit Blur/Crytal Effekt und aufgesetzen *.PNG's mit GDI+ feine sache
wenn man drauf steht natürlich.


gruss

franktron 9. Jul 2012 08:51

AW: GDI, GDI+ oder doch Direct2D?
 
Warum nicht ganz einfach FMX nutzen wenn man schon XE2 hat, das ist doch OpenGL oder DirectX und schön schnell.

TiGü 9. Jul 2012 09:00

AW: GDI, GDI+ oder doch Direct2D?
 
Zitat:

Zitat von franktron (Beitrag 1174038)
Warum nicht ganz einfach FMX nutzen wenn man schon XE2 hat, das ist doch OpenGL oder DirectX und schön schnell.

Ganz einfach:
Eine VCL-Anwendung komplett auf eine FMX-Anwendung umzugestalten ist aufwendig und die Zeit bezahlt einen keiner.

christian.noeding 9. Jul 2012 09:11

AW: GDI, GDI+ oder doch Direct2D?
 
Hallo,

danke schon einmal für die Antworten. Firemonkey kann ich nicht einsetzen, da das Hauptprogramm ein herkömmliches VCL-Programm ist. Die Anzeige soll als Docking in die Hauptanwendung eingebaut werden. Soweit mir bekannt ist kann ich FMX-Fenster nur per DLL (oder mit sehr teuren Tools) in die VCL-Anwendung integrieren.

@EWeiss: wie sähe die Kombination von GDI+ und OpenGL aus? Google spuckt da zwar viel aus, aber wenn Du nen kleinen Tipp hast wäre das gut.

Kann einer eine Aussage zum Vergleich TDirect2DCanvas <-> GDI(+) machen? Wenn das TDirect2DCanvas flott genug für 25 FPS ist, wäre ich damit ja schon zufrieden :) Ich kanns auch selber ausprobieren, aber wenn da jemand schon Erfahrung hat, brauch ich nicht extra zig Zeilen Code schreiben, um dann festzustellen, dass die Lösung langsamer als die Alte ist.


besten Dank,
Chris

blackfin 10. Jul 2012 15:47

AW: GDI, GDI+ oder doch Direct2D?
 
Zitat:

25 FPS
Wenn du 25fps brauchst, würde ich generell von einer CPU-basierten Lösung wie GDI+ abraten und gleich auf OpenGL /Direct2D gehen.
Vorteil liegt auf der Hand: Volle Leistung der GPU und kein CPU-Krüppelding :-)
Kann zwar gut sein, dass GDI+ in vielen Fällen 25fps schafft, aber der Leistungs-Spielraum nach oben ist bei einer GPU-basierten Lösung um mehrere Faktoren höher.

OpenGL hätte dann sogar den Vorteil, solltest du deine Anwendung irgendwann mal auf mobile Geräte bringen wollen (ist ja zur Zeit nicht so abwegig), kannst du zumindest den OpenGL Code schon teilweise übernehmen, da OpenGL (ES) auf mobilen Geräten der Standard ist.

GDI+ ist etwas, auf das ich bei einer Neuentwicklung nicht mehr setzen wurde.


@EWeiss: wenn du schon OpenGL benutzt, für was brauchst du dann noch GDI+ ? Kann gut sein, dass es in manchen Fällen sinnvoll ist, allerdings fällt mir jetzt spontan nichts ein, worin GDI+ irgend einen Vorteil hätte gegenüber OpenGL, im Gegenteil.
Würd mich deswegen interessieren, warum du die beiden Techniken verbindest und für was?

Bummi 10. Jul 2012 16:59

AW: GDI, GDI+ oder doch Direct2D?
 
@blackfin

bei mir Transparenzen in Komponenten incl. Zoom/Scale/Rotate Antialiasing etc.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:19 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz