![]() |
TColor mit Alpha
Hallo,
ich möchte mit TColor und Alpha-Transparenz arbeiten. Soweit ich weiß sind die ersten 2 Zeichen nach dem $-Symbol der Alpha-Wert, danach folgt rot, grün und blau. Stimmt das? Wie kann ich nun den Alpha-Wert setzen bzw. extrahieren? In der Graphics-Unit habe ich folgendes gefunden:
Delphi-Quellcode:
Interpretiere ich das richtig dass man mit folgendem Code an den Alpha-Wert kommt?
procedure ByteSwapColors(var Colors: array of COLORREF; Count: Integer);
var // convert RGB to BGR and vice-versa. TRGBQuad <-> TPaletteEntry I: Integer; Color: COLORREF; begin for I := 0 to Count - 1 do begin Color := Colors[I]; { Alpha = HiByte(HiWord(Color)) = (Color shr 16) shr 8 Red = LoByte(Hiword(Color)) = Byte(Color shr 16) Green = HiByte(LoWord(Color)) = Word(Color) shr 8 Blue = LoByte(LoWord(Color)) = Byte(Word(Color)) Colors[I] := MakeLong(MakeWord(Red, Green), MakeWord(Blue, Alpha)); } Colors[I] := (Byte(Color shr 16) or (Word(Color) shr 8) shl 8) or (Byte(Word(Color)) or ((Color shr 16) shr 8) shl 8) shl 16; end; end;
Delphi-Quellcode:
Wenn das stimmt, wie setze ich den Wert wenn er als Word oder Byte vorliegt?
var
Color: COLORREF; Alpha: Word; begin Color := $00000000; Alpha := (Color shr 16) shr 8; end; Schöne Grüße, Andreas Lauß |
AW: TColor mit Alpha
TColor (bzw. die GDI) unterstützt kein Alpha.
|
AW: TColor mit Alpha
Sagen wir mal so: Kein Alpha auf Pixelbasis. 'Transparente' overlays sind durchaus möglich.
Zum anderen ist die Zuordnung der Bytes zu den Farben bei Delphi etwas seltsam, da tut man sich mit den bereitgestellten Funktionen leichter. Tomy |
AW: TColor mit Alpha
Zitat:
Und für was sind dann die ersten beiden Zeichen? Welchen Typ kann ich statt TColor verwenden? Zitat:
|
AW: TColor mit Alpha
Zitat:
Wenn du Alpha-Transparenz haben willst musst du mit der GDI+ arbeiten oder sogar OpenGL/DirectX (wobei das wahrscheinlich totaler Overkill wäre). |
AW: TColor mit Alpha
Zitat:
|
AW: TColor mit Alpha
Zitat:
Was hast du denn überhaupt vor? |
AW: TColor mit Alpha
Genau zur Frage kann ich nichts sagen, aber vielleicht ist "AlphaBlend" interessant.
Damit habe ich mal einen Schatteneffekt realisiert. ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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