Ok, let's start from begining. What I need: I want to add color filter to image with intensity parameter. Output should be like on image from post #3. My current code:
Delphi-Quellcode:
Row.R := (Color.R * Row.R) div 255;
Row.G := (Color.G * Row.G) div 255;
Row.B := (Color.B * Row.B) div 255;
Example output from my code:
(see 1.png, left part - 0%)
Now output with @Medium proposition:
Delphi-Quellcode:
function Lerp(a, b: Byte; t: Double): Byte;
var
tmp: Double;
begin
tmp := t*a + (1-t)*b;
if tmp<0 then result := 0 else
if tmp>255 then result := 255 else
result := Round(tmp);
end;
Row.R := Lerp(Color.R, (Color.R * Row.R) div 255, APercent / 100);
Row.G := Lerp(Color.G, (Color.G * Row.G) div 255, APercent / 100);
Row.B := Lerp(Color.B, (Color.B * Row.B) div 255, APercent / 100);
(see 1.png)
And @jfheins (or maybe I don't understand your formula and coded wrong?):
Delphi-Quellcode:
B := (Row.R + Row.G + Row.B) div 3;
Row.R := IntToByte(Round((1 - (APercent / 100)) * Row.R + (APercent / 100) * (Color.R * B)));
Row.G := IntToByte(Round((1 - (APercent / 100)) * Row.G + (APercent / 100) * (Color.G * B)));
Row.B := IntToByte(Round((1 - (APercent / 100)) * Row.B + (APercent / 100) * (Color.B * B)));
(see 2.png)