在c#中从Windows Mobile的流中获取图像
本文关键字:获取 图像 Mobile 中从 Windows | 更新日期: 2023-09-27 18:06:16
我正在尝试接收图像形式服务器,并希望在WM应用程序中将其显示为图片框。我成功地接收了图像流,但我找不到任何方法将其显示到PictureBox中。在windows程序中,我们在Image类中有一个方法是FromStream (Image.FromStream),但这个函数在Compact Framework 3.5中不可用。我还尝试了以下代码:
private void button1_Click(object sender, EventArgs e)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress IP = IPAddress.Parse("192.168.1.2");
IPEndPoint IPE = new IPEndPoint(IP, 4321);
s.Connect(IPE);
byte[] buffer = new byte[55296];
s.Receive(buffer, buffer.Length, SocketFlags.None);
MemoryStream ms = new MemoryStream(buffer);
Image im = new Bitmap(ms); //EXCEPTION
pictureBox1.Image = im;
}
但是它给出了一个异常。没有提供异常的详细信息,VS只显示一个带有"exception"文本的对话框。
您的图像大小是否小于缓冲区的大小?如果不是,则丢失所有多余的数据并抛出异常。
如果没有指定缓冲区长度,也可以尝试。
using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
IPAddress IP = IPAddress.Parse("192.168.1.2");
IPEndPoint IPE = new IPEndPoint(IP, 4321);
s.Connect(IPE);
byte[] buffer = new byte[55296];
int rec = s.Receive(buffer, SocketFlags.None);
using (MemoryStream ms = new MemoryStream(buffer, 0, rec))
{
Image im = new Bitmap(ms);
pictureBox1.Image = im;
}
}
您必须检查套接字的Receive方法的返回值才能确定位图缓冲区的大小:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress IP = IPAddress.Parse("192.168.1.2");
IPEndPoint IPE = new IPEndPoint(IP, 4321);
s.Connect(IPE);
byte[] buffer = new byte[55296];
int rec = s.Receive(buffer, buffer.Length, SocketFlags.None);
MemoryStream ms = new MemoryStream(buffer, 0, rec);
Image im = new Bitmap(ms);
pictureBox1.Image = im;
希望有帮助。