Ich denke er meint dieses dunkle "Etwas" links im Bild
.
Um zwei Farben zu vereinen gibt es massig Varianten. Die einfachste und hierbei wohl sinnvollste ist das Überblenden. Wenn das überdeckende Objekt zu 50% durchlässig sein soll, dann errechnet sich deine Farbe so:
Delphi-Quellcode:
// c1 und c2 seien die zu mischenden Farben
r1 := GetRValue(c1);
g1 := GetGValue(c1);
b1 := GetBValue(c1);
r2 := GetRValue(c2);
g2 := GetGValue(c2);
b2 := GetBValue(c2);
myColor :=
rgb((r1+r2)
div 2,
(g1+g2)
div 2,
(b1+b2)
div 2);
Also das arithmetische Mittel zwischen den einzelnen Farbanteilen.
Will man aber, dass z.B. Farbe c1 nicht 50% deckt, sondern beliebig stark, dann wird's ein klein wenig mehr:
Delphi-Quellcode:
function MixColors(color1, color2: TColor; c1Anteil: Double): TColor;
var
c1, c2: LongInt;
c2Anteil: Double;
begin
if (c1Anteil<0)
or (c1Anteil>1)
then Exit;
// der Anteil wird zwischen 0 und 1 erwartet
c2Anteil := 1-c1Anteil;
// Das hier verhindert falsche Ergebnisse, falls eine der Farben eine bekannte Farbkonstante
// wie z.B. clWhite ist.
c1 := ColorToRGB(color1);
c2 := ColorToRGB(color2);
result :=
rgb(round(c1Anteil*GetRValue(c1) + c2Anteil*GetRValue(c2)),
round(c1Anteil*GetGValue(c1) + c2Anteil*GetGValue(c2)),
round(c1Anteil*GetBValue(c1) + c2Anteil*GetBValue(c2)));
end;
Wenn für den Parameter "c1Anteil" 0.5 übergeben wird, ist diese Funktion gleichwertig mit der oberen.
Gruss,
Fabian
\\edit: Korrektur im Code.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel