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

MemoryStream.Read不';t将字节复制到缓冲区-c#,c#,image,buffer,memorystream,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, co

我真的不明白,这让我发疯。 我有以下四行:

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个值。 我不明白为什么会这样?这几行没有什么不对的! 如果有人能帮助我,我将不胜感激! 谢谢
agnieszka

您需要重置文件指针

imageStream.Seek( 0, SeekOrigin.Begin );

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

添加:

imageStream.Position = 0;
就在:

imageStream.Read(contentBuffer, 0, contentBuffer.Length);
read指令中的0表示内存流中当前位置的偏移量,而不是流的开始。加载流后,位置位于末尾。您需要将其重置为开头。

只需使用

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);
imageStream.ToArray()
它工作起来更容易