Fixed: BlendColors was off by 1 level for each channel (shr 8 = div 256, not div 255 dummy!)
This commit is contained in:
parent
d96cbe45a4
commit
5a274c11ef
@ -164,19 +164,28 @@ function BlendColors(const ABackground, AForeground: TColor;
|
||||
var
|
||||
cBack: Cardinal;
|
||||
cFore: Cardinal;
|
||||
bBack: Byte;
|
||||
iBack: Integer;
|
||||
iFore: Integer;
|
||||
|
||||
begin
|
||||
if AAlpha = 0 then
|
||||
Result := ABackground
|
||||
else if AAlpha = 255 then
|
||||
Result := AForeground
|
||||
else
|
||||
begin
|
||||
cBack := ColorToRGB(ABackground);
|
||||
cFore := ColorToRGB(AForeground);
|
||||
bBack := 255 - AAlpha;
|
||||
iBack := 256 - AAlpha;
|
||||
iFore := Succ(AAlpha);
|
||||
|
||||
Result := RGB(((GetRValue(cBack) * bBack) +
|
||||
(GetRValue(cFore) * AAlpha)) shr 8,
|
||||
((GetGValue(cBack) * bBack) +
|
||||
(GetGValue(cFore) * AAlpha)) shr 8,
|
||||
((GetBValue(cBack) * bBack) +
|
||||
(GetBValue(cFore) * AAlpha)) shr 8);
|
||||
Result := RGB(((GetRValue(cBack) * iBack) +
|
||||
(GetRValue(cFore) * iFore)) shr 8,
|
||||
((GetGValue(cBack) * iBack) +
|
||||
(GetGValue(cFore) * iFore)) shr 8,
|
||||
((GetBValue(cBack) * iBack) +
|
||||
(GetBValue(cFore) * iFore)) shr 8);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user