Ver Mensaje Individual
  #3  
Antiguo 04-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
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.
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo 02.zip (4,0 KB, 51 visitas)
Responder Con Cita