Cuando usas un TStream (y subclases) para este tipo de acción, normalmente, tendrás que iniciar los bits para determinar el tipo de archivo junto a todos los demás bytes.
Así mismo, necesitarás hacer el "avance" para el punto donde realmente vienen los bytes de la imagen.
Cuando un mapa de bits se convierte en una secuencia de funciones básicas de Delphi, los 2 primeros bytes identifican el tipo de imagen. En este caso, un mapa de bits es igual a: byte 1 (66=B), byte 2 (77=M).
A partir del tercer byte comienzan los datos de la imagen.
Código Delphi
[-]
procedure TForm2.LerBlobParaMemoryStream( MemTable: TFDMemTable; const FieldName: string; DestStream: TMemoryStream );
var
BlobStream: TStream;
begin
if MemTable.FieldByName( FieldName ).IsNull then
Exit;
BlobStream := MemTable.CreateBlobStream( MemTable.FieldByName( FieldName ), bmRead );
try
DestStream.Clear;
DestStream.CopyFrom( BlobStream, BlobStream.Size );
DestStream.Position := 0; finally
BlobStream.Free;
end;
end;
Código Delphi
[-]
procedure TForm2.Button1Click( Sender: TObject );
var
LStream: TMemoryStream;
LBytes : TBytes;
LText : string;
begin
LStream := TMemoryStream.Create;
try
LerBlobParaMemoryStream( FDMemTable1, 'bitmapi', LStream );
if LStream.Size = 0 then
Exit;
LStream.Position := 0;
SetLength( LBytes, 3 );
if LStream.Read( LBytes, 3 ) = 0 then
Exit;
for var B in LBytes do
LText := LText + '[' + B.ToString + ']=' + ifthen( B = 0, '0', Chr( B ) ) + ',';
Memo1.Lines.Add( 'Bytes= ' + LText );
finally
LStream.Free;
end;
end;
