如何从 C# 中的文件流中获取多个图像

How to get multiple images from a filestream in C#

我有一个 Stream myStream,我想从中获取 jpeg。如果流只是一个 jpeg 就没问题,我会做 Image img = Image.FromStream(MyStream); 但流实际上是一个 header(ASCII 文本)后跟一个 jpeg,然后是一个 header,接着是 jpeg...

我可以轻松提取 headers,它们包含有关 jpeg 的信息(特别是它的分辨率和字节大小),但我不知道如何在它们通过时获取图像并将它们保存到磁盘(实际上我只想在动画中一个接一个地显示它们,但这是一回事)。

有人有什么想法吗?

直播内容如下:

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

首先,您真的不想尝试使用文本文件执行此操作。您想以二进制形式读取文件,这就是 BinaryReader 的用途。

所以请阅读第一个 header。这为您提供了以字节为单位的 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.
}