AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia GDI+: Transparenz auf TImage
Thema durchsuchen
Ansicht
Themen-Optionen

GDI+: Transparenz auf TImage

Ein Thema von Jazzman_Marburg · begonnen am 24. Jul 2011 · letzter Beitrag vom 25. Jul 2011
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

GDI+: Transparenz auf TImage

  Alt 24. Jul 2011, 10:05
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
Miniaturansicht angehängter Grafiken
test.png  
--- 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
 
#2

AW: GDI+: Transparenz auf TImage

  Alt 24. Jul 2011, 12:00
Schau dir mal den Beitrag an:
http://www.delphipraxis.net/160538-a...zu-timage.html
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: GDI+: Transparenz auf TImage

  Alt 24. Jul 2011, 12:28
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 .

Noch jemand mit der Erik'schen Lib unterwegs?

Danke & 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+: Transparenz auf TImage

  Alt 24. Jul 2011, 15:47
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: GDI+: Transparenz auf TImage

  Alt 24. Jul 2011, 16:36
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

Geändert von EWeiss (25. Jul 2011 um 02:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: GDI+: Transparenz auf TImage

  Alt 24. Jul 2011, 18:46
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: GDI+: Transparenz auf TImage

  Alt 25. Jul 2011, 01:38
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.
SelectObject(MeinKompatiblesDC, MeinHBITMAP);

gruss

Geändert von EWeiss (11. Jul 2019 um 16:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

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

AW: GDI+: Transparenz auf TImage

  Alt 25. Jul 2011, 11:56
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
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Antwort Antwort


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:14 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