![]() |
Zwei Farben "Alphablenden"
Ich habe mal wieder ein kleines Problem. Ich möchte zwei Farben ineinander überblenden. Ungefähr so:
Delphi-Quellcode:
Wenn Alpha 255 ist dann soll result := col1 sein, wenn Alpha 0 ist dann soll result := col2 sein.
function Blend(col1,col2:TColor;alpha:byte);
begin result := ... end; Ich habe das vorher immer mit einer Schleife geregelt. Gibt es da nicht noch andere möglichkeiten? Im Forum habe ich nichts gefunden. |
Re: Zwei Farben "Alphablenden"
Es gibt die Functionen
Delphi-Quellcode:
Mit denen kannst du dir die RGB werte auslesen GetRValue(Value:Tcolor):Byte; GegGValue(Value:Tcolor):Byte; GetBValue(Value:Tcolor):Byte; das AUsrechen der neuen ist ja wohl hoffentlich nicht dein Problem. Dann gibts nocht
Delphi-Quellcode:
Für die Rückrichtung.
rgb(r,g,b:Byte):Tcolor;
|
Re: Zwei Farben "Alphablenden"
ja durch simple mathematik.
eine farbe ist nichts anderes als eine positon in einen würfel (3d raum). die distanz zwischen den farben im raum ist dein alpha. wenn du kein bock auf 3d-mathe hast dann kann du auch einfach für jede komponente (rgb) die distanz alleine ausrechnen. |
Re: Zwei Farben "Alphablenden"
Doch, genau das ausrechnen ist mein Problem.
Neunte Klasse Mathemathik? - Da kommt man nicht sehr weit, ich denke nicht das dies mit einem Dreisatz zu schaffen ist. Könntet ihr bitte mal verdeutlichen wie genau ihr das meint... |
Re: Zwei Farben "Alphablenden"
Hat zwar etwas mit Vektoren zu tun, aber 5. Klasse sollte genügen ;) .
Überleg mal: Angenommen, wir haben einen Rotwert R1 = 0 und einen zweiten R2 = 100. Nun willst die Werte mischen, wobei R2 60% Gewichtigkeit hat. Nächster Fall: R1 = 10, R2 = 110, wieder 60% R2 Der Schritt zur allgemeinen Formel sollte nicht mehr schwer fallen. |
Re: Zwei Farben "Alphablenden"
Ok
Ich hoffe ich habe das jetzt richtig verstanden:
Delphi-Quellcode:
Werde ich gleich ausprobieren...
r := r1*(1-1/255*alpha)+r2(1/255*alpha);
|
Re: Zwei Farben "Alphablenden"
Zitat:
oder du machst es so hier:
Delphi-Quellcode:
Dieser code dürfte auch um einiges schneller sein, da man hier nicht runden muss.
r:=(r1*alpha + r2*(not alpha)) shr 8;
mfg |
Re: Zwei Farben "Alphablenden"
mach mit div oder mit round() sonst geht das nid ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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