Winform项目中在Debug文件夹下有一个“ZP.bmp”,要把它读到Picturebox(Pic_Identity_BM)中,有两种方法:、
第一种
 FileStream fsReadPic = new FileStream("zp.bmp", FileMode.Open, FileAccess.Read);
                Bitmap bmTemp = new Bitmap(fsReadPic);
                Pic_Identity_BM.Image = bmTemp;
                fsReadPic.Close();
第二种:
Pic_Identity_BM.Image = Image.FromFile("zp.bmp");问题:请问这两种方式有什么不同???用第一种方式把图片读取到Pictruebox中,用下面的方法获取Pictruebox中的图片时会出现异常,获取不到Pictrue中的图片:byte[] IDimg = CS_Common.ReadPicBox.ImageDatabytes(bitmap);
            if (IDimg.ToString() != "")
            {
                m_pxryinfo.IDimg = IDimg;
            }
            else
            {
                m_pxryinfo.IDimg = CS_Common.IDimgNull.IDimgNull.imgNull();
            }IDimg对象为空ImageDatabytes在下面如果换用第二种方式把图片读取到Pictruebox中,上面的方法获取Pictruebox中的图片时可以正常获取,但是不能连续读取图片,会出现错误:“内存被保护或内存被损坏"public static byte[] ImageDatabytes(Bitmap myBitmap)
        {
            try
            {
                using (MemoryStream curImageStream = new MemoryStream())
                {
                    myBitmap.Save(curImageStream, System.Drawing.Imaging.ImageFormat.Png);
                    curImageStream.Flush();
                    byte[] bmpBytes = curImageStream.ToArray();
                    return bmpBytes;
                }
            }
            catch
            {
                return null;
            }
        }
请问这样的问题应该怎样解决呢???

解决方案 »

  1.   

    问题解决了,哈哈正如sswp7所说,把fsReadPic.Close();声明为全局变量,在提交信息的时候关闭,而不是在读取之后关闭就可以,但是不知道为什么呢???谁能解释下
      

  2.   

    使用MemoryStream 流时,在操作完成后,最后是需要关闭的
      

  3.   

    第一种是以二进制流的方法来读数据,第二种是以PictureBox自己提供的方法来读,受控件功能的限制,不太自由。你到我的资源去下载一个方法来看一下,就是使用Stream的方法将图片读取成多维数组。
      

  4.   

    使用数据流在处理img读取,你可以封装在一个方法中,在读取完最后,关闭文件流。避免发生异常。