Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   JPG oder PNG mit transparenten Bereichen zeichnen (https://www.delphipraxis.net/197586-jpg-oder-png-mit-transparenten-bereichen-zeichnen.html)

posbi 19. Aug 2018 09:03

JPG oder PNG mit transparenten Bereichen zeichnen
 
Hallo,

ich habe folgendes Problem, bei dem ich nicht weiter komme.

Ich habe Delphi 10.2.3 Enterprise. Die Anwendung ist eine FMX Anwendung.

Ich habe ein Bild als JPG, BMP (oder auch PNG) Datei in der es Bereiche gibt die Transparent sein sollen. Zur Laufzeit sollen diese transparenten Bereiche (Kreise und Rechtecke) dann mit Farben gefüllt werden. Alle transparente Bereiche sollen dabei die gleiche Farbe erhalten, so das im Prinzip der Hintergrund auf den das Bild gezeichnet wird einfarbig sein kann und nur die bestimmten Bereiche durchsichtig sein müssen, damit der Hintergrund durchscheint.

Ich habe jetzt schon ewig gesucht, aber nichts wirklich passendes gefunden. Hat jemand eine Idee wie man so etwas umsetzt? Oder einen Link wo so etwas schon mal gemacht oder beantwortet wurde?

Viele Grüße

Redeemer 19. Aug 2018 13:49

AW: JPG oder PNG mit transparenten Bereichen zeichnen
 
Bei JPG geht es nicht, Transparenz mit BMP ist auch nicht standartisiert. Der Standard sagt: 32-Bit-Bitmaps sind Bitmaps, bei denen das 4. Byte ausschließlich der Platzverschwendung dient.

PNG kann Transparenz:
Delphi-Quellcode:
  PNG := TPNGImage.Create();
  try
    PNG.LoadFromFile(bla);
    PNG2 := TPNGImage.CreateBlank(PNG.Width, PNG.Height, COLOR_RGB, 8);
    try
      PNG2.Canvas.Brush.Color := clIrgendwas;
      PNG2.Canvas.FillRect(Rect(0,0,PNG.Width,PNG.Height));
      PNG2.Canvas.Draw(0,0, PNG);
      PNG2.TueDinge();
    finally
      PNG2.Free();
    end;
  finally
    PNG.Free();
  end;

DeddyH 19. Aug 2018 14:05

AW: JPG oder PNG mit transparenten Bereichen zeichnen
 
Ich habe es neulich schon gepostet, vielleicht hilft Dir das hier weiter? https://parnassus.co/open-source/ttransparentcanvas/

KodeZwerg 19. Aug 2018 14:38

AW: JPG oder PNG mit transparenten Bereichen zeichnen
 
Bei Bildformaten die keine eigenen Alphachannels besitzen bedient man sich oftmals eines kleinen Tricks, man wertet Farbe bei Pixel 0,0 aus und setzt diese als Transparenz-Farbe. Ob man das generell so handhaben kann da bin ich überfragt.

Harry Stahl 19. Aug 2018 16:08

AW: JPG oder PNG mit transparenten Bereichen zeichnen
 
Zitat:

Zitat von posbi (Beitrag 1411072)
Hallo,

ich habe folgendes Problem, bei dem ich nicht weiter komme.

Ich habe Delphi 10.2.3 Enterprise. Die Anwendung ist eine FMX Anwendung.

Ich habe ein Bild als JPG, BMP (oder auch PNG) Datei in der es Bereiche gibt die Transparent sein sollen. Zur Laufzeit sollen diese transparenten Bereiche (Kreise und Rechtecke) dann mit Farben gefüllt werden. Alle transparente Bereiche sollen dabei die gleiche Farbe erhalten, so das im Prinzip der Hintergrund auf den das Bild gezeichnet wird einfarbig sein kann und nur die bestimmten Bereiche durchsichtig sein müssen, damit der Hintergrund durchscheint.

Ich habe jetzt schon ewig gesucht, aber nichts wirklich passendes gefunden. Hat jemand eine Idee wie man so etwas umsetzt? Oder einen Link wo so etwas schon mal gemacht oder beantwortet wurde?

Viele Grüße

Wie die anderen schon erwähnt haben, kann eine JPeg-Datei keine transparenten Bereiche haben (eine 32-Bit-Bitmap unter Windows schon, diese wirst Du aber nicht in FMX einlesen können).

Als Quelle müsstest Du also schon .PNG-Dateien verwenden, die Du dann wie beschrieben modifizieren kannst.

Du müsstest also die einzelnen Pixel prüfen und bei den transparenten Pixeln den alpha-Wert auf Null setzen und die anderen RGB-Werte mit der gewünschten Farbe setzen.

Unter FMX greifst Du da per "TBitmap.map" und "TBitmapData.GetPixel" bzw. "TBitmapData.SetPixel" lesend und schreibend auf die einzelnen Pixel zu.

Bei Bedarf: In meinem letzten FMX-Buch ist im Kapitel 6 ("Grafikbearbeitung mit FireMonkey") unter Punkt 3. ein Beispiel mit Source-Code beschrieben, wie man den Alpha-Wert eines TBitmaps verändern kann (unter Punkt 2., wie man Farben setzt).

posbi 23. Aug 2018 09:37

AW: JPG oder PNG mit transparenten Bereichen zeichnen
 
Hallo,

vielen Dank für eure vielen Antworten. Grundsätzlich habe ich es nun hinbekommen. Im Moment kämpfe ich noch mit den unterschiedlichen Skalierungen und Auflösungen bei verschiedenen Devices.
Ich denke wahrscheinlich immer noch zu in "VCL"

Aber dazu stelle ich gleich eine neue Frage.

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.

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