-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

簡単な方法は、ファイルの署名を確認することです。たとえば、一般的な画像形式の署名は次のとおりです。

  • PNG: 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 に答える