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); 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); end;