Ver Mensaje Individual
  #20  
Antiguo 17-11-2009
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Reputación: 21
seara2005 Va por buen camino
En este caso no se utiliza otro campo para el formato.

Para probar en un Formulario (Form1) pones:
Un TOpenPictureDialog y lo nombras OpenPictureDialog,
Un TButton y Lo Nombras ButtonCargarImagen,
Un TButton y lo Nombras MostrarImagen,
Un TButton y lo Nombras BorrarImagen,
Un TImage y lo Nombras ImageFoto,
Además en DataModule1 existe una tabla de InterBase IBTPersonas con un campo tipo Blob llamado Foto (Enlazada a la correspondiente base de datos).
Tambien puedes poner un DbGrid enlazado a la Tabla mediante el DataSource correspondiente para seleccionar el registro con que quieras experimentar.

Adicionar en el Uses JPEG

Para cargar la Imagen (bmp, jpg, ico) con el diálogo directamente a la base de datos:
Código Delphi [-]
procedure TForm1.ButtonCargarImagenClick(Sender: TObject);
var
  Jpg: TJpegImage;
  Stream: TMemoryStream;
  FileExt: string;
  GraphType: TGraphType;
begin
  if OpenPictureDialog.Execute then
     begin
      Jpg := nil;
      Stream := nil;
      try
        Stream := TMemoryStream.Create;
        FileExt := LowerCase(ExtractFileExt(OpenPictureDialog.FileName));
        if (FileExt = '.bmp') or (FileExt = '.dib') then 
          begin
             GraphType := gtBitmap;
             Stream.Write(GraphType, 1);
             with ImageFoto.Picture.Bitmap do 
                begin
                   LoadFromFile(OpenPictureDialog.FileName);
                   ImageFoto.Picture.Bitmap.SaveToStream(Stream);
                end;
          end 
          else if (FileExt = '.ico') then 
                begin
                   GraphType := gtIcon;
                   Stream.Write(GraphType, 1);
                   with ImageFoto.Picture.Icon do 
                      begin
                         LoadFromFile(OpenPictureDialog.FileName);
                         ImageFoto.Picture.Bitmap.SaveToStream(Stream);
                      end;
                end 
          else if (FileExt = '.emf') or (FileExt = '.wmf') then 
                begin
                   GraphType := gtMetafile;
                   Stream.Write(GraphType, 1);
                   with ImageFoto.Picture.Metafile do 
                      begin
                         LoadFromFile(OpenPictureDialog.FileName);
                         ImageFoto.Picture.Bitmap.SaveToStream(Stream);
                      end;
                end 
          else if (FileExt = '.jpg') or (FileExt = '.jpeg') or (FileExt = '.jpe') then 
                begin
                   Jpg := TJpegImage.Create;
                   Jpg.LoadFromFile(OpenPictureDialog.FileName);
                   ImageFoto.Picture.Assign(Jpg);
                   GraphType := gtJpeg;
                   Stream.Write(GraphType, 1);
                   Jpg.SaveToStream(Stream);
                end;
      DataModule1.IBTPersonas.Edit;
      Stream.Position := 0;
      DataModule1.IBTPersonasFoto.LoadFromStream(Stream);
     except
      jpg.Free;
      Stream.Free;
      raise;
     end;
     jpg.Free;
     Stream.Free;
   end;
end;

Para Mostrar la Foto almacenada en la base de dastos en el TImage:
Código Delphi [-]
procedure TForm1.MostrarImagenClick(Sender: TObject);
var
  Stream: TMemoryStream;
  Jpg: TJpegImage;
  GraphType: TGraphType;
begin
  Jpg := nil;
  Stream := nil;
  try
    Stream := TMemoryStream.Create;
    DataModule1.IBTPersonasFoto.SaveToStream(Stream);
    if Stream.Size > 0 then 
       begin
          Stream.Position := 0;
          Stream.Read(GraphType, 1);
          case GraphType of
             gtBitmap:   Form1.ImageFoto.Picture.Bitmap.LoadFromStream(Stream);
             gtIcon:      Form1.ImageFoto.Picture.Icon.LoadFromStream(Stream);
             gtMetafile: Form1.ImageFoto.Picture.Metafile.LoadFromStream(Stream);
             gtJpeg:     begin
                               Jpg := TJpegImage.Create;
                               Jpg.LoadFromStream(Stream);
                               Form1.ImageFoto.Picture.Assign(Jpg);
                            end 
             else Form1.ImageFoto.Picture.Assign(nil);  // Limpiar la imagen
         end;
      end 
    else Form1.ImageFoto.Picture.Assign(nil);
  except
    Form1.ImageFoto.Picture.Assign(nil);
  end;
  jpg.Free;
  Stream.Free;
end;

Para Borrar la imagen de la base de datos:
Código Delphi [-]
procedure TForm1.BorrarImagenClick(Sender: TObject);
begin
   ImageFoto.Picture.Assign(nil);
   DataModule1.IBTPersonas.Edit;
   DataModule1.IBTPersonasFoto.Assign(nil);  // Limpiar el campo
end;
__________________
Saludos

Seara2005

Última edición por seara2005 fecha: 17-11-2009 a las 23:27:45.
Responder Con Cita