Thema: Delphi Durchscheineffekt

Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Durchscheineffekt

  Alt 4. Okt 2004, 01:38
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
  Mit Zitat antworten Zitat