Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Graphics32 und Aplhatransparenz (https://www.delphipraxis.net/50237-graphics32-und-aplhatransparenz.html)

richard_boderich 22. Jul 2005 12:19


Graphics32 und Aplhatransparenz
 
moin leutz,

kann mir mal jemand sagen , wie ich dort genau eine alphatrasparenz erzeuge.
Ich kann zwar ein image laden und wenn ich das gleiche image nochmal unter aplhachannel lade bekomm ich es auch angezeigt, aber
ich finde nirgendwo etwas zum einstellen der aphatranparenz?

Gruß Richard


// hat sich erledigt ;)

barf00s 22. Jul 2005 12:36

Re: Graphics32 und Aplhatransparenz
 
AlphaToIntensity()

dizzy 22. Jul 2005 17:33

Re: Graphics32 und Aplhatransparenz
 
Es kommt darauf an welches Alpha du meinst. Die G32 kennt nämlich 2 Werte dafür:

1) Den Per-Pixel-Alpha der für jeden Farbwert zusätzlich im höchstwertigen Byte von TColor32 hinterlegt wird
2) Den Master-Alpha - ein Byte dass für das gesamte TBitmap32 gilt

(1) lässt sich entweder durch direktes Zuweisen per Pixel manipulieren, oder mit IntensityToAlpha(). D.h. du hast z.B. ein .bmp mit deinem Bild, und ein zugehöriges s/w-bmp dass den Alphakanal beschreibt. Dann läsdst du als erstes dein bmp in ein TBitmap32, und dein Alpha-Bild in ein zweites. Dieses machst du nun per IntensityToAlpha() zum Alphachannel des ersten (und kannst das TBitmap32 für das Alpha dann auch wieder freigeben).

Damit du aber überhaupt was davon merkst, musst du TBitmap32.DrawMode auf dmBlend setzen! Standard ist dmOpaque, bei dem Alpha komplett ignoriert wird. Wenn du nun also ein TBitmap32 via Draw oder DrawTo zeichnest, dann wird dein Alpha berücksichtigt. Was aber nicht geht ist, dass andere Controls o.ä. durchscheinen. Das wirkt imho nur beim Zeichnen von TBitmap32 auf TBitmap32 (bin mir jedoch auf einmal nicht mehr 100%ig sicher :)).

Für (2) einfach TBitmap32.MasterAlpha auf einen Wert 0..255 setzen. Hier gilt alles obige mit, und dieser Wert wird imho mit den per-pixel Werten verrechnet. (Ich habe jeoch bisher nie MasterAlpha und Pixel-Alpha in Kombination eingesetzt. Müsste aber einfach so klappen.) Der DrawMode hat auch hier Auswirkungen.



Das Alpha-Bild muss allerdings nicht zwangsläufig s/w sein. Es geht jedes, wobei die einzelnen Farbwerte zu einer Intensität verrechnet werden (also in s/w umgewandelt). Dabei wäre darauf zu achten, dass es sein kann dass die G32 da "richtig" vorgeht, also 255er Grün weitaus intensiver wertet als 255er Blau, da es dem Menschen ja heller erscheint. Somit ist man wenn man von vorne herein s/w-Bilder verwendet auf der sicheren Seite.
Das Laden, da über 2 TBitmaps32, ist etwas umständlich, aber es gibt imho keine Funktion Formate zu laden die den Alpha integriert haben (.png z.B.). Man könnte sich aber spaßeshalbar ein TBitmap32 ableiten oder ne Funktion schreiben der man einfach beide Filenames übergibt, und den Kleinkram zentral erledigt (wenn man öfter sowas zu laden hat).


Gruss,
Fabian

Riese 27. Feb 2006 11:32

Re: Graphics32 und Aplhatransparenz
 
Also ich habe es jetzt geschafft mittels AlphaToIntensity so ein Bild zu erstellen. Würde dies jetzt gerne speichern.
Image.Bitmap.SaveToFile () speichert nur das Originalbild.
Komme ich auch irgendwie auf das konvertierte Bild?

Gruß
Riese

SirThornberry 27. Feb 2006 11:36

Re: Graphics32 und Aplhatransparenz
 
die allgemeingültigste Variante wäre es direkt von der Canvas abzugreifen, also eine Art Screenshot.
Wenn TImage32 von TWinControl abgeleitet ist kannst du auch die Methoden "PaintTo" verwenden.


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