Firemonkey - 从base64字符串显示图像(如何?)

时间:2016-03-16 13:21:55

标签: android ios delphi firemonkey

我正在为android / ios创建一个 FMX applicacion (Delphi Seattle),我通过 RESTResponse 组件接收 Json 数据。 json数据在base64 (utf8 encoded)字符串中有一个Image(Photo)字段,我希望在TImage组件中显示该字段。请问你能告诉我怎么办?

UPDATE :我已将JSON数据作为对象和字符串,如下所示:

{
   "Name" : "Alfred", 
   "Photo": "zC8bH24CIjYX5eedCWIvnNqar4xkQRqPxt2n8cReAwWD4+w/2qErkJggg==..."
}

所以我在base64字符串中有了Image。所以我真正的问题是:

  1. 如何将base64字符串转换为图像?
  2. 如何在TImage组件中显示图像?
  3. 我正在学习德尔福,并试图弄清楚自己很难,所以我很感激你的帮助。

    感谢。

1 个答案:

答案 0 :(得分:3)

您提出了三个不同的问题:

  1. 如何从JSON中提取base64。任何JSON解析器都会处理它,包括one built in to Delphi

  2. 如何解码base64。 Base64是一种非常容易实现的算法,它不需要很多代码来完成它。但也有大量现成的实现可用。例如,Indy预装了Delphi,并且有一个TIdDecoderMIME类用于将base64数据解码为字符串,字节数组或TStream。在这种情况下,您可以使用TIdDecoderMIME.DecodeStream()将base64解码为TMemoryStream

  3. 如何在TImage中显示解码图像。在FireMonkey中,所有图片格式都由FMX.Graphics.TBitmap类处理,该类具有LoadFromStream()方法(请参阅TBitmap可以处理的Supported Image Formats上的Embarcadero文档每个平台)。因此,在这种情况下,您可以调用TImage.Bitmap.LoadFromStream()将上述步骤#2中的流传递给它。

  4. 所以,你可以尝试这样的事情:

    uses
      ..., JSON, IdCoderMIME;
    
    var
      S: String;
      Strm: TMemoryStream;
    begin
      S := (RESTResponse1.JSONValue as TJSONObject).Values['Photo'].Value;
      Strm := TMemoryStream.Create;
      try
        TIdDecoderMIME.DecodeStream(S, Strm);
        Strm.Position := 0;
        Image1.Bitmap.LoadFromStream(Strm);
      finally
        Strm.Free;
      end;
    end;