uses
fpimage, fpreadjpeg, fpwritejpeg, math;
procedure GammaCorrection(const ASrcFile, ADestFile: String; AGamma: Double);
var
img: TFPMemoryImage;
reader: TFPCustomImageReader;
writer: TFPCustomImageWriter;
i, j: Integer;
clr: TFPColor;
invGamma: Double;
begin
img := TFPMemoryImage.Create(10, 10);
try
reader := TFPReaderJpeg.Create;
try
img.LoadFromFile(ASrcFile, reader);
finally
reader.Free;
end;
invGamma := 1.0 / AGamma;
for j := 0 to img.Height - 1 do
for i := 0 to img.Width - 1 do
begin
clr := img.Colors[i, j];
clr.Red := round(((clr.Red / 65535)**invGamma)*65535);
clr.Green := round(((clr.Green / 65535)**invGamma)*65535);
clr.Blue := round(((clr.Blue / 65535)**invGamma)*65535);
img.Colors[i, j] := clr;
end;
writer := TFPWriterJpeg.Create;
try
img.SaveToFile(ADestFile, writer);
finally
writer.Free;
end;
finally
img.Free;
end;
end;