Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Zwei Farben "Alphablenden" (https://www.delphipraxis.net/67102-zwei-farben-alphablenden.html)

igel457 9. Apr 2006 17:19


Zwei Farben "Alphablenden"
 
Ich habe mal wieder ein kleines Problem. Ich möchte zwei Farben ineinander überblenden. Ungefähr so:

Delphi-Quellcode:
function Blend(col1,col2:TColor;alpha:byte);
begin
  result := ...
end;
Wenn Alpha 255 ist dann soll result := col1 sein, wenn Alpha 0 ist dann soll result := col2 sein.

Ich habe das vorher immer mit einer Schleife geregelt. Gibt es da nicht noch andere möglichkeiten?

Im Forum habe ich nichts gefunden.

Corpsman 9. Apr 2006 17:25

Re: Zwei Farben "Alphablenden"
 
Es gibt die Functionen

Delphi-Quellcode:

GetRValue(Value:Tcolor):Byte;
GegGValue(Value:Tcolor):Byte;
GetBValue(Value:Tcolor):Byte;
Mit denen kannst du dir die RGB werte auslesen

das AUsrechen der neuen ist ja wohl hoffentlich nicht dein Problem.

Dann gibts nocht

Delphi-Quellcode:
rgb(r,g,b:Byte):Tcolor;
Für die Rückrichtung.

generic 9. Apr 2006 17:27

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.

igel457 9. Apr 2006 17:39

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...

Khabarakh 9. Apr 2006 17:45

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.

igel457 9. Apr 2006 17:50

Re: Zwei Farben "Alphablenden"
 
Ok

Ich hoffe ich habe das jetzt richtig verstanden:

Delphi-Quellcode:
  r := r1*(1-1/255*alpha)+r2(1/255*alpha);
Werde ich gleich ausprobieren...

Phantom1 9. Apr 2006 18:13

Re: Zwei Farben "Alphablenden"
 
Zitat:

Zitat von igel457
Ok

Ich hoffe ich habe das jetzt richtig verstanden:

Delphi-Quellcode:
  r := r1*(1-1/255*alpha)+r2(1/255*alpha);

Ja so in etwa müsste es gehen, musste halt das ergebnis noch runden

oder du machst es so hier:
Delphi-Quellcode:
r:=(r1*alpha + r2*(not alpha)) shr 8;
Dieser code dürfte auch um einiges schneller sein, da man hier nicht runden muss.

mfg

Nicodius 9. Apr 2006 19:05

Re: Zwei Farben "Alphablenden"
 
mach mit div oder mit round() sonst geht das nid ;)


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