MemoryStream.Read不会将字节复制到缓冲区 - c#

时间:2008-12-17 21:52:07

标签: c# image buffer memorystream

我真的没有得到它,这让我疯了。 我有这四行:

Image img = Image.FromFile("F:\\Pulpit\\soa.bmp");
MemoryStream imageStream = new MemoryStream();
img.Save(imageStream, ImageFormat.Bmp);
byte[] contentBuffer = new byte[imageStream.Length];
imageStream.Read(contentBuffer, 0, contentBuffer.Length);

调试时我可以看到imageStream中的字节值。在imageStream之后。我检查contentBuffer的内容,我只看到255个值。 我不明白为什么会这样?在这几行中没有什么可错的! 如果有人能帮助我,我将不胜感激! 谢谢, agnieszka

5 个答案:

答案 0 :(得分:39)

尝试将imageStream.Position设置为0.当您写入MemoryStream时,它会在您刚写入的字节后移动位置,所以如果您尝试读取那里没有任何内容。

答案 1 :(得分:25)

您需要重置文件指针。

imageStream.Seek( 0, SeekOrigin.Begin );

否则你正在阅读流的末尾。

答案 2 :(得分:12)

添加:

imageStream.Position = 0;

之前:

imageStream.Read(contentBuffer, 0, contentBuffer.Length);

读取指令中的0表示与存储器流中当前位置的偏移,而不是流的开始。加载流后,位置结束。您需要将其重置为开头。

答案 3 :(得分:8)

Image img = Image.FromFile("F:\\Pulpit\\soa.bmp");
MemoryStream imageStream = new MemoryStream();
img.Save(imageStream, ImageFormat.Bmp);
byte[] contentBuffer = new byte[imageStream.Length];
imageStream.Position = 0;//Reset the position at the start
imageStream.Read(contentBuffer, 0, contentBuffer.Length);

答案 4 :(得分:5)

只需使用

imageStream.ToArray()

它有效且更容易。