C#将图像保存到内存流

时间:2015-10-05 22:34:25

标签: c#

我只想将屏幕上的图像bmp保存到我得到的内存流中:

  

值不能为null。参数名称编码器

我使用此代码

pmb = new Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
gc = Graphics.FromImage(pmb);
gc.CopyFromScreen(0, 0, 0, 0, new Size(pmb.Width, pmb.Height));
pb.Image = pmb;
pb.SizeMode = PictureBoxSizeMode.StretchImage;

try
{
    client = new TcpClient(mm.Text, 1430);
    ms = new MemoryStream();
    pb.Image.Save(ms, pb.Image.RawFormat);
    ms.Close();
    byte[] buffer = ms.GetBuffer();
    ns = client.GetStream();
    br = new BinaryWriter(ns);
    br.Write(buffer);
    br.Close();
    ns.Close();
    client.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

2 个答案:

答案 0 :(得分:2)

关闭后,您正在访问MemoryStream

ms.Close();
byte[] buffer = ms.GetBuffer();

此外,如果抛出异常,则不会清理资源。对于实现IDisposable的所有内容,请使用using关键字。

在写入内存流并将其保存之前,您需要回放内存流

ms.Seek(0, SeekOrigin.Begin);

答案 1 :(得分:0)

这是节省内存

lowercase MemoryStream ms =新的MemoryStream(); enter code here pictureBox_ad_cam_in.Image.Save(毫秒,System.Drawing.Imaging.ImageFormat.Jpeg); enter code here kanvert = Convert.ToBase64String(ms.ToArray());

相关问题