2016-03-16 76 views
-1

我创造的Android/IOS一个FMX applicacion(德尔福西雅图),我通过RESTResponse组件接收的Json数据。 json数据在base64 (utf8 encoded)字符串中有一个图像(照片)字段,我想在TImage组件中显示该字符串。请你可以告诉我我该怎么做?Firemonkey - 显示从的base64字符串图像(如何?)

更新:我已经将JSON数据作为对象,因此像这样的字符串:

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

所以我有一个base64字符串的图像。所以我真正的问题是:

  1. 如何将base64字符串转换为图像?
  2. 如何在TImage组件中显示图像?

我正在学习delphi,并试图找出自己这是一个困难,所以我感谢你的帮助。

谢谢。

+0

首先,你已经在使用JSON解析器?一旦你有了,那么这是一个解码这个字符串的问题。 –

+1

...虽然这是一个相当不重要的问题。哪一部分是问题?这里至少有三个问题。如何解码JSON并检索base64字符串?如何将base64字符串解码为图像?如何在TImage中显示图像?如果你有三个不同的问题,然后问他们在单独的问题。如果第一个和第三个问题你知道该怎么做,那么它们是不相关的,不应该包含在这里。 –

+1

我们不在这里为你做工作。请解释你正在努力寻找哪一方面,然后我们会找到一个重复的问题来帮助你。 –

回答

2

你问三个独立的问题:

  1. 如何提取从JSON以base64。任何JSON解析器都可以处理该问题,包括one built in to Delphi

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

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

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

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;