【发布时间】:2016-10-02 19:42:32
【问题描述】:
我正在执行以下操作将 TBitmap(Firemonkey) 转换为字符串:
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;
如何将字符串恢复为 TBitmap?我做了以下不会产生 TBitmap 的操作:
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;
我需要更小的 base64 字符串,以便将其传输到 Datasnap 服务器。正常的 base64 字符串让我内存不足,因为字符串的长度大于 200000 - 1000000。
【问题讨论】:
-
@Johan:将位图保存为PNG格式的代码,然后对PNG进行base64编码,然后对其进行解码,最后将其加载到位图中。唯一涉及的字符串是 base64。
-
@TomBrunberg base64 解码为 PNG,TBitmapCodecManager 可以加载 PNG。
-
哎呀,打扰了。让我们清理不相关的 cmets。
标签: string delphi firemonkey tbitmap