ich folgende tue TBitmap (Firemonkey) in String zu konvertieren:Delphi TBitmap bespannen über TBitmapSurface und zurück zu TBitmap
function BitmapToBase64(Bitmap: Tbitmap): string;
var
BS: TBitmapSurface;
AStream: TMemoryStream;
begin
BS := TBitmapSurface.Create;
BS.Assign(Bitmap);
BS.SetSize(300, 200);
AStream := TMemoryStream.Create;
try
TBitmapCodecManager.SaveToStream(AStream, BS, '.png');
Result := TNetEncoding.Base64.EncodeBytesToString(AStream, AStream.Size);
finally
AStream.Free;
BS.Free;
end;
end;
Wie kann ich die Zeichenfolge wieder in TBitmap wiederherstellen? Ich habe folgende, die nicht TBitmap produziert:
procedure Base64ToBitmap(AString: String; Result : Tbitmap);
var
ms : TMemoryStream;
BS: TBitmapSurface;
bytes : TBytes;
begin
bytes := TNetEncoding.Base64.DecodeStringToBytes(AString);
ms := TMemoryStream.Create;
try
ms.WriteData(bytes, Length(bytes));
ms.Position := 0;
BS := TBitmapSurface.Create;
BS.SetSize(300, 200);
try
TBitmapCodecManager.LoadFromStream(ms, bs);
Result.Assign(bs);
finally
BS.Free;
end;
finally
ms.Free;
end;
end;
ich kleinere Größe von base64 String benötigen, damit ich es zu DataSnap-Server übertragen kann. Die normale base64-Zeichenfolge gibt mir nicht genügend Speicher, da die Größe der Zeichenfolge größer als 200000 - 1000000 ist.
@Johan: den Code ein Bitmap PNG-Format speichern und dann die PNG Base64-Kodierung, Dekodierung es dann, und schließlich in eine Bitmap zu laden. Die einzige beteiligte Zeichenfolge ist die base64. –
@TomBrunberg dekodiert die Base64 zu einem PNG, und TBitmapCodecManager kann ein PNG laden. –
Autsch, Entschuldigung für den Lärm. Lass uns irrelevante Kommentare aufräumen. –