Te adjunto una pequeña prueba que cambia los componentes de color de una imagen. Es muy simple. Captura cada uno de los pixels de una imagen y modifica en un porcentaje cada unos de los componentes (red, green, blue).
Puedes utilizar las funciones que te comenté para realizar otras transformaciones, de forma similar. Una vez que lo tengas se pueden realizar optimizaciones, por ejemplo usando ScanLine.
El código de modificación sería algo así:
Código Delphi
[-]
procedure TForm6.TrackBar1Change(Sender: TObject);
var
i,j:integer;
col, nCol:TColor;
bmp:TBitmap;
rval, gval, bval:integer;
begin
bmp := TBitmap.Create;
try
bmp.Assign(Image1.Picture.Graphic);
Image2.Picture.Assign(bmp);
for i := 0 to ((bmp.Canvas.ClipRect.Right - bmp.Canvas.ClipRect.Left) - 1) do begin
for j := 0 to ((bmp.Canvas.ClipRect.Bottom - bmp.Canvas.ClipRect.Top) - 1) do begin
col := bmp.Canvas.Pixels[i, j];
rval := GetRValue(Col);
gval := GetGValue(col);
bval := GetBValue(Col);
rval := round(rval * (TrackBar1.Position / 100));
gval := round(gval * (TrackBar2.Position / 100));
bval := round(bval * (TrackBar3.Position / 100));
nCol := RGB (rval, gval, bval);
bmp.Canvas.Pixels[i, j] := nCol;
end;
end;
finally
Image2.Picture.Graphic.Assign(bmp);
FreeAndNil(bmp)
end;
end;