![]() |
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 |
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; |
AW: JPG oder PNG mit transparenten Bereichen zeichnen
Ich habe es neulich schon gepostet, vielleicht hilft Dir das hier weiter?
![]() |
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.
|
AW: JPG oder PNG mit transparenten Bereichen zeichnen
Zitat:
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). |
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