El "formato" ya lo tenes, es el stream o todos los bytes. Eso ya es la imagen con el formato. Luego, todos los archivos tienen una cabecera en donde se guarda informacion sobre que tipo de archivo y que formato tiene. Pero creo que estas complicandote con cosas que ya estan resueltas
Lo unico que tenes que hacer es guardar un "valor" y luego recuperar y mostrar ese "valor". Tipicamente lo que se hace es pasar la imagen a algun descendiente de TStream (por ejemplo, TMemoryStream) y se envia un comando a la BD para que guarde ese stream.
Luego, haces un query por ese campo, lo obtienes como stream, y se lo pasas al componente de imagen
Codigo medio de memoria, pero la idea es esta:
Código Delphi
[-]
procedure GuardarImagen(Imagen: TImage);
var
StreamImagen: TStream;
begin
qry := crear tu componente query
qry.Connection := le asignas la conexion
qry.SQL.Text := 'INSERT INTO TABLA (CampoImagen) VALUES (:CampoImagen)';
StreamImagen := TMemoryStream.Create;
try
Imagen.SaveToStream(StreamImagen);
StreamImagen.Position := 0;
qry.ParamByName('CampoImagen').AsSteam := StreamImagen;
qry.Execute;
finally
StreamImagen.Free;
end;
end
Código Delphi
[-]
procedure MostrarImagen;
begin
qry := ...
qry.Open;
Image1.LoadFromStream(qry.FieldByName('CampoImagen').AsStream);
end;
Tambien es posible pasar la imagen a un monton de otras representaciones; por ej BASE64 es muy usada