-1

如何判断流是否包含图片?我正在使用 Delphi xe8 FMX 开发 iOS 应用程序。我有一个列表框,并且正在将图片加载到项目中。我可以做这个:

          if not Assigned(S) then
            s:=TMemoryStream.Create;
          if not Assigned(clHTTP) then
            clHTTP := TIDHTTP.Create;
          with clHTTP do
          begin
            clHTTP.HandleRedirects := True;
            clHTTP.AllowCookies := True;
            clHTTP.RedirectMaximum := 110000;
            clHTTP.Get(someimageURL,s);
          end;
          s.Seek(0,soFromBeginning);
          try
            LItem.ItemData.Bitmap.LoadFromStream(s);
          except
            clHTTP.Get(DefaultImageURL,s);
            s.Seek(0,soFromBeginning);
            LItem.ItemData.Bitmap.LoadFromStream(s);
          end;
          s.Free;
          clHTTP.Free;

我宁愿不使用 try-except 块,因为这似乎会导致位图的加载不一致。例如,我必须将列表框项目滚动到视图之外,然后返回视图以查看图片。

4

1 回答 1

0

一种快速的方法是检查文件签名。例如,以下是一些常见的图像格式签名:

  • 巴布亚新几内亚:89 50 4E 47 0D 0A 1A 0A
  • JPEG:FF D8 FF E0
  • GIF87a:47 49 46 38 37 61
  • GIF89a:47 49 46 38 39 61

可以在此处找到完整列表:http ://en.wikipedia.org/wiki/List_of_file_signatures

这种方法不会证明流的其余部分是有效的,但它是一个好的开始,至少可以让你拒绝明显的铃声。

于 2015-05-06T21:39:30.277 回答