Hola jafera.
Entiendo el problema pero al menos yo, no pude encontrar en forma directa evento o redefinición de método alguno para hacer la conversión de
TJPEGImage a
TBitmap, antes de que se produzca la asignación del campo al
TDBImage.
Se me ocurrió que una opción, si no son muchos datos, podría ser utilizar un
TClientDataSet en memoria. Para el ejemplo que te adjunto hice una tabla con sólo dos campos, un campo entero llamado ('ID') y otro blob que contiente la imágen ('IMAGEN'). Datos estos que cargo en el
TClientDataSet mediante un
TIBQuery.
Código Delphi
[-]
uses jpeg;
procedure JpgToBitmap(AField: TField; B:TBitmap);
var
J: TJPEGImage;
begin
J:= TJPEGImage.Create;
try
J.Assign(TBlobField(AField));
B.Height:= J.Height;
B.Width:= J.Width;
B.Assign(J)
finally
J.Free
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
B: TBitmap;
begin
CDS1.CreateDataSet;
CDS1.Open;
IBQuery1.Open;
B:= TBitmap.Create;
try
while not IBQuery1.Eof do
begin
CDS1.Append;
CDS1ID.Value:= IBQuery1.FieldByName('ID').Value;
JpgToBitmap(IBQuery1.FieldByName('IMAGEN'), B);
CDS1Imagen.Assign(B);
CDS1.Post;
IBQuery1.Next
end;
finally
B.Free
end;
IBQuery1.Close;
DBCtrlGrid1.DataSource:= DataSourceCDS1;
DBImage1.DataField:= 'IMAGEN';
DBImage1.Stretch:= True
end;
A partir de aquí podés utilizar todos los DBControls a traves del ClientDataSet, es decir que para mostrar información no se precisa más. Pero si existe la posibilidad de que se modifique algún dato deberías actualizar lo realizado al finalizar...
Saludos.