18

我真的不明白,它让我发疯。我有这 4 行:

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.Read 之后我检查 contentBuffer 的内容,我只看到 255 个值。我不明白为什么会这样?这几行没有什么可做的!如果有人可以帮助我,将不胜感激!谢谢,阿格涅斯卡

4

5 回答 5

41

尝试将 imageStream.Position 设置为 0。当您写入 MemoryStream 时,它会将位置移动到您刚刚写入的字节之后,因此如果您尝试读取,那里什么都没有。

于 2008-12-17T21:57:22.087 回答
26

您需要重置文件指针。

imageStream.Seek( 0, SeekOrigin.Begin );

否则,您将从流的末尾读取。

于 2008-12-17T21:56:03.290 回答
13

添加:

imageStream.Position = 0;

就在之前:

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

读取指令中的 0 代表与内存流中当前位置的偏移量,而不是流的开始。加载流后,位置位于末尾。您需要将其重置为开头。

于 2008-12-17T22:00:54.670 回答
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);
于 2008-12-17T22:04:12.137 回答
5

只需使用

imageStream.ToArray()

它可以工作并且更容易。

于 2010-10-17T21:47:48.950 回答