2012-04-17 24 views
8

私はいくつかの画像ファイルを1つのファイル(ある種類のアーカイブ)に保存しています。 - ヘッダとデータ・セグメントJPEGデータストリームからTImage

enter image description here

まあ、それは2つのセグメントに分けています:このファイルは、次のようになります。ヘッダー(緑色)には、アルバム名、場所、日付/時刻、説明、アルバム内の写真数などのさまざまな情報が含まれます。データセグメント(青色&オレンジ)はシンプルな構造で、N x JPEG写真を含んでいます。私はその "imagedata"セグメントを新しいTMemoryStreamオブジェクトに取り出すことができ、今はTImageを使ってそれを表示したいと思います。

SaveAsFile TMemoryStreamのメソッドを使用して、一時ファイル名を設定し、そのファイルをTImageからロードしてから、一時ファイルを削除します。それはうまくいきますが、tempを使ってそのストリームをTImageに送る方法はありますか?ファイル。

もちろん、ハードディスク上のすべてのファイルを抽出するコードを書くことはできますが、問題はこのようなアーカイブがたくさんあり、2万以上の写真ではなくその "アルバム"私のハードドライブに。要するに

、私が望むすべては、手続きの作品(/ TEMPを使用してワットファイル)事前に

procedure ShowImageFromStream(data: TStream; img: TImage); 
begin 
... 
end; 

おかげで、次のようにすることです。

答えて

18

私はそれはあなたが探しているものだかどうかわからないんだけど、このコードは与えられたTImageのコンポーネントにストリームからJPEGファイルをロードする必要があります

uses 
    JPEG; 

procedure ShowImageFromStream(AImage: TImage; AData: TStream); 
var 
    JPEGImage: TJPEGImage; 
begin 
    AData.Position := 0; 
    JPEGImage := TJPEGImage.Create; 
    try 
    JPEGImage.LoadFromStream(AData); 
    AImage.Picture.Assign(JPEGImage); 
    finally 
    JPEGImage.Free; 
    end; 
end; 
+1

+1少しデフVAR名けどとしてちょうど同じ私は入力している、私はより速く入力する方法を学ぶ必要があります。 – Dampsquid

+2

MY GOD、以前はTJPEGImageを使用していましたが、私はLoadFromStreamメソッドを完全に見逃しました!ありがとう、それだけです。 – Wh1T3h4Ck5

+0

喜んで助ける;-) – TLama