2016-05-27 1 views
-1

にFILESTREAMから複数の画像を取得するためにはどうすればStream myStreamを持っていると私はそれからJPEGを取得したいです。これは私が...C#の

ストリームはちょうどJPEGだった場合、私はちょうどImage img = Image.FromStream(MyStream);を行うだろうが、ストリームは、実際にJPEGに続くヘッダに続いて、JPEG、続くヘッダ(ASCIIテキスト)でOKでしょうヘッダーを簡単に抽出することができ、jpegに関する情報(具体的には解像度とバイト数)を含んでいますが、画像を取得してディスクに保存する方法はわかりません(実際には、それらはアニメーションの中で相次いでいますが、ちょっと同じことです)。

誰でもいいですね。ここで

は、ストリームは次のようになります。

[320,240,10734]jpegDataIncomprihensibleTextGoingOnForAges[320,240,10032]jpegDataIncomprihensibleTextGoingOnForAges...

+0

、何が同じように画像を抽出することができないように?あなたは彼らの賢明さを知っています。 – Evk

+0

"size in bytes"値を使用して、現在のイメージのストリームから読み込むバイト数を調べましたか?その後、データがなくなるまでこれをループとして実行します。 – Tom

+0

私はになるまで読むことでそれらを抽出するので、しかし私はjpegが終わるであろうかわからない –

答えて

3

まず、あなたは本当にテキストファイルでこれを実行しようとする必要はありません。このファイルをバイナリとして読みたいのですが、それはBinaryReaderのためです。

最初のヘッダーを読んでください。それはあなたにバイト単位のjpegサイズを与えます。ファイルをjpegの先頭に置き、その数バイトをメモリに読み込みます。その後、MemoryStreamを作成し、そのストリームから画像を構築します。

ので、広く:あなたはヘッダを抽出できた場合

var reader = new BinaryReader(File.Open(fileName, FileMode.Open)); 
while not end of file 
{ 
    // read header. Probably want to read characters one at a time here. 
    StringBuilder sb = new StringBuilder(); 
    char c; 
    do 
    { 
     c = reader.ReadChar(); 
     sb.Append(c); 
    } while c != ']'; 
    var header = sb.ToString(); 

    // parse header. One of the fields you get is SizeInBytes 

    var imageBytes = reader.ReadBytes(SizeInBytes); 
    var stream = new MemoryStream(imageBytes); 
    var jpeg = Image.FromStream(stream); 

    // do what you want with the jpeg here. 

    // the file should be positioned at the start of the next header 
    // so just do it all again until no more data. 
} 
+0

これは完璧な答えのようです。 memoryStreamはこの問題を解決する鍵でした。ご協力ありがとうございました。また、私はそれが 'reader.Read(SizeInBytes);だと思いますが、間違いかもしれません。 BinaryReaderについてのヒントもありがとうございます。 –

+0

申し訳ありません、あなたは正しいです、 'reader.ReadBytes(SizeInBytes); 'はあなたが使っているBinaryReaderで動作しますが、あなたはそれを知っていると確信しています。 @captainjamie: 'imageBytes'(バイトの配列)を前もって割り当てていれば、' reader.Read(imageBytes、0、SizeInBytes) 'を使うこともできます。 –

+0

@captainjamie –