Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GDI+: Transparenz auf TImage (https://www.delphipraxis.net/161846-gdi-transparenz-auf-timage.html)

Jazzman_Marburg 24. Jul 2011 09:05

GDI+: Transparenz auf TImage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Leute!
Wenn ich in ein TImage über die Property Picture ein trasparentes PNG-File lade (TPngImage) dann wird die Transparenz richtig dargestellt. Prima.
Wenn ich nun aber mit GDI+ das gleiche Bild mit DrawImage in einem TImage darstelle, dann wird das Bild auf einem weißen Hintergrund gemalt -- kann ich das wohl abstellen und auch hier einen transparenten Hintergrund bekommen?
Als Attachment seht ihr das Ergebnis: Das linke ist wird wie gesagt direkt im Object-Inspector des TImage geladen, das rechte mit GDI+ auf ein TImage gemalt.
Hier mein GDI+ Code:
Delphi-Quellcode:
procedure TForm1.Draw;

var
  Graphics : IGPGraphics;
  gImage  : IGPImage;
  R       : TGPRectF;

begin

  gImage  := TGPImage.Create('Test.PNG');
  Graphics := TGPGraphics.Create(gImage);

  R.Initialize(0, 0, gImage.Width, gImage.Height);

  Graphics.CompositingMode := CompositingModeSourceCopy;
  Graphics.DrawImage(gImage, R);

  Graphics := TGPGraphics.Create(Form1.Image.Canvas.Handle);

  Graphics.DrawImage(gImage, R, 0, 0,
  gImage.Width,
  gImage.Height,
  UnitPixel);
end;

Jemand eine Idee?

Lieben Dank & Gruß
Jazzman

turboPASCAL 24. Jul 2011 11:00

AW: GDI+: Transparenz auf TImage
 
Schau dir mal den Beitrag an:
http://www.delphipraxis.net/160538-a...zu-timage.html

Jazzman_Marburg 24. Jul 2011 11:28

AW: GDI+: Transparenz auf TImage
 
Hallo turboPASCAL,

ja, das Demo sieht genau nach dem aus was ich gesucht habe -- allein ich nutze die GDI+ Library von Erik, d.h. warscheinlich ist das für mich nicht nutzbar :cry:.

Noch jemand mit der Erik'schen Lib unterwegs?

Danke & Gruß
Jazzman

turboPASCAL 24. Jul 2011 14:47

AW: GDI+: Transparenz auf TImage
 
Nun, das ist ja nun keine gute Ausrede, das lässt sich mit Sicherheit auch mit der Lib von Erik realisieren.
Er baut ja auch auf die selbe API auf. ;)

EWeiss 24. Jul 2011 15:36

AW: GDI+: Transparenz auf TImage
 
Ich erstelle das indem ich den Hintergrund kopiere und auf diesen dann mein Bild zeichne.

PS:
Bzw.. den transparenten Hintergrund der PNG mit dem kopierten Hintergrund fülle.

gruss

Jazzman_Marburg 24. Jul 2011 17:46

AW: GDI+: Transparenz auf TImage
 
Zitat:

Zitat von EWeiss (Beitrag 1113286)
Ich erstelle das indem ich den Hintergrund kopiere und auf diesen dann mein Bild zeichne.

gruss

Das klingt interessant -- auch mit der GDI von Erik?
Wie machst Du das konkret -- vielleicht ein Beispiel?

Vielen Dank.

Gruß, Jazzman

EWeiss 25. Jul 2011 00:38

AW: GDI+: Transparenz auf TImage
 
Zitat:

Zitat von Jazzman_Marburg (Beitrag 1113315)
Zitat:

Zitat von EWeiss (Beitrag 1113286)
Ich erstelle das indem ich den Hintergrund kopiere und auf diesen dann mein Bild zeichne.

gruss

Das klingt interessant -- auch mit der GDI von Erik?
Wie machst Du das konkret -- vielleicht ein Beispiel?

Vielen Dank.

Gruß, Jazzman

Hat nichts mit GDI+ zu tun sondern sind einfache GDI functionen.
  • Erstelle ein kompatibles DC
  • Selektiere das Object mit dem erstellten Kompatiblen DC und deinem Hintergrund
  • Bitblt(erstelltes DC, ... DC... SRCCOPY)
  • Und lösche das erstellte DC mit DeleteDC.
2 Bilder im Anhang..
Das erste ohne Bitblt.
Das zweite mit Bitbl.

Das sind 4 Zeilen Quelltext :)
Mehr brauchst da nicht.

PS:
Ach so wenn du kein Hintergrund Bitmap hast dann mußt du erst eins
mit CreateDIBSection erstellen ;)
Zurück geliefert bekommst du dann ein HBITMAP!

Das benötigst du dann für das Selektierte Objekt.
Delphi-Quellcode:
SelectObject(MeinKompatiblesDC, MeinHBITMAP);


gruss

Memnarch 25. Jul 2011 10:56

AW: GDI+: Transparenz auf TImage
 
Das hier sollte auch liefern was du brauchst, und das sogar mit perpixel alpha ;)

AlphaBlend

Da musste nicht soviel mit DC und erst recht kein Select object etc

EDIT: da braucht man nichtmal PNGs, 32bit Bitmaps mit Alphachannel arbeiten damit auch


MFG
Memnarch


Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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