【发布时间】:2015-03-27 09:19:35
【问题描述】:
我在 Delphi Xe7 FireMonkey 使用 WebServices 编写移动应用程序。 我有一个关于网络服务的网络方法。该网络方法是将 Base64 字符串发布到我的数据库中。 Delphi Side 是从 Bitmap 创建这个 Base64 字符串。 我用这个算法
Uses ....EncdDecd;
function Tfrm_yenikayit.BitmapToBase64(Bitmap: TBitmap): string;
var
Input : TMemoryStream;
Output: TStringStream;
begin
Input := TMemoryStream.Create;
try
Bitmap.SaveToStream(Input);
Input.Position := 0;
Output := TStringStream.Create('');
try
EncdDecd.EncodeStream(Input, Output);
Result := Output.DataString;
finally
Output.Free;
end;
finally
Input.Free;
end;
end;
但是尺寸为 1920x1280 的照片会产生大约 300 万个字符。 我如何将图像制作成短字符串并且比这个算法更快?
【问题讨论】:
-
1920x1280 位图包含 300 万像素,占用(对于 24 位格式)900 万字节,Base64 编码给出的结果大小约为 12 兆字节。为了使其更短,您可以例如将位图压缩为 jpeg(有质量损失)
-
对不起,我想写一个比这个 Base64String 更短的字符串
-
@Mbo 我知道,但质量对我来说并不重要,只是我想拍照
-
OK,然后创建JPEG,为其分配位图,并将jpeg保存到流中进行base64编码
-
@MBo 我想,但 firemonkey 上没有 Tjpegimage,我尝试用这个算法制作相同大小的图片。结果是一样的
标签: android delphi base64 delphi-xe7