【发布时间】:2011-03-12 20:16:47
【问题描述】:
我正在尝试在 c# 中将 byte[] 转换为 Bitmap。以下是代码:
MemoryStream ms = new MemoryStream(b);
Bitmap bmp = new Bitmap(ms);
创建Bitmap时显示错误Parameter is not valid。
byte[] b 来自网络流。
但是当我将这个 byte[] 写入一个文件,并在任何图像查看器中打开这个文件时,它就可以完美地工作。以下是将 byte[] 写入文件的代码:
var fs = new BinaryWriter(new FileStream("tmp.bmp", FileMode.Create, FileAccess.Write));
fs.Write(b);
fs.Close();
我在这里错过了什么?
编辑
这是导致问题的完整代码
Socket s = listener.AcceptSocket();
byte[] b = new byte[imgLen];
s.Receive(b);
MemoryStream ms = new MemoryStream(b);
// now here I am using ms.Seek(0, SeekOrigin.Begin); that fixed my problem.
Bitmap bmp = new Bitmap(ms);
pictureBox1.Image = bmp;
s.Close();
我在Form_Load 事件中使用此代码,没有任何额外内容。我只是想显示在网络上流式传输的图像。服务器是用 Java 编写的,用于传输此图像。
希望能解惑。
谢谢
【问题讨论】:
-
您是否尝试过使用 Image.FromStream 代替?我想不出为什么这会奏效,但值得一试......
-
试过 Image.FromStream 但也没有用。
-
@Jon 太晚了,乔恩,达林这周有你!
-
你能显示一个(最小化的)完整工作部分的代码,它会抛出这个错误吗?也许错误来自其他地方的错误。另外:您可以在查看器中打开图像并不一定意味着图像数据对于 GDI+ 理解是有效的。如果您使用
MemoryStream从磁盘打开tmp.bmp会发生什么?