Imagebox,将bytearray转换为图像所以有什么问题?

时间:2014-09-25 14:31:10

标签: c#

我想创建一个可以从网络摄像头读取数据的应用程序。它使真正明亮的像素变红(现在)。但我无法将其写入图像框。那么问题是什么? //对不起英文

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        WebCam camera = new WebCam();
        if (!camera.IsConnected())
        {
            camera.Connect();
        }
        else
        {
            Application.Exit();
        }



        //    for (int x = 0; x <= 10000; x++)
        //   {
        camera.Update();

        MemoryStream ms = new MemoryStream();
        camera.CalcBitmap().Save(ms, ImageFormat.Bmp);
        byte[] bitmapData = ms.ToArray();
        /*
                            int i = 54;

                            while (i <= (bitmapData.Length - 2))
                            {
                                if ((bitmapData[i] >= 240) & (bitmapData[i + 1] >= 240) & (bitmapData[i + 2] >= 240))
                                {
                                    bitmapData[i] = 255;
                                    bitmapData[i + 1] = 0;
                                    bitmapData[i + 2] = 0;
                                    i += 3;
                                }
                            }*/
        MemoryStream stream = new MemoryStream(bitmapData);
        pictureBox1.Image = new Bitmap(stream);


        //  }
    }

2 个答案:

答案 0 :(得分:0)

因此,在经历了很多痛苦之后,我将图片框功能留空,我将所有内容写入了一个按钮功能。它奏效了!我仍然不知道是什么问题,但我认为即使连接了网络摄像头,图片框也很累。

  public partial class Form1 : Form
{
   public static WebCam camera = new WebCam();

    private void button1_Click(object sender, EventArgs e)
    {

       if (!camera.IsConnected())
            {
                camera.Connect();
                camera.Update();

                MemoryStream ms = new MemoryStream();
                camera.CalcBitmap().Save(ms, ImageFormat.Bmp);
                byte[] bitmapData = ms.ToArray();
                MemoryStream stream = new MemoryStream(bitmapData);
                pictureBox1.Image = new Bitmap(stream);

            }
            else
            {
                Application.Exit();
            }


    }
    public void pictureBox1_Paint(object sender, PaintEventArgs e)
    {

    }

答案 1 :(得分:-1)

您必须在拥有非托管资源的对象上调用Dispose(),以便释放内存。

MemoryStream ms = null
try{
    //your code
}
finally{
    if(ms != null){
        ms.Dispose()
    }
}