Para manipular una imagen contenida en un TImage es necesario que este contenga un Bitmap, asi que si lo que hay es una imagen jpg tenemos un problema, pero todo tiene solucion.
Una solucion rapida seria usar Bitmaps en vez de Jpegs, pero supongo que esta no es la solucion que esperabas
La otra solucion que se me ocurre es cargar la imagen jpg y convertirla en un bitmap antes de asignarla al TImage para asi poder manejarla sin problemas.
Seria algo asi
Código Delphi
[-]
var
jpg: TJPEGImage;
bmp: TBitmap;
begin
if dlgOpen.Execute then
begin
try
jpg:= TJPEGImage.Create;
bmp:= TBitmap.Create;
try
jpg.LoadFromFile(dlgOpen.FileName);
bmp.Assign(jpg);
Imagen.Picture.Assign(bmp);
finally
jpg.Free;
bmp.Free;
end;
except
ShowMessage('No puedo abrir la imagen');
end;
end;
end;
Luego para convertirla a gris yo usaria el clasico sumar y dividir, aunque aqui cada uno aplica el que mas le gusta:
Código Delphi
[-]
type
Triple = array[1..3]of Byte;
procedure TfrmMain.btnGrisClick(Sender: TObject);
var
P: ^Triple;
i,j: Integer;
begin
with Imagen.Picture do
begin
Bitmap.PixelFormat:= pf24bit;
for j:= 0 to Bitmap.Height - 1 do
begin
P:= Bitmap.ScanLine[j];
for i:= 0 to Bitmap.Width - 1 do
begin
P^[1]:= (P^[1] + P^[2] + P^[3]) div 3;
P^[2]:= P^[1];
P^[3]:= P^[1];
inc(P);
end;
end;
end;
Imagen.Refresh;
end;
Por ultimo te dejo un pequeño ejemplo, con uno de los botones cargas una jpg y con el otro vuelves la imagen en tonos de gris.