none
Image.FromStream 参数无效 RRS feed

  • 问题

  • 这是写入到数据库的(部分 即将图片转换成二进制)代码、、写入数据是没有问题的

    {

                    string str = openFileDialog1.FileName.ToString();
                    FileStream fs = new FileStream(str,FileMode.Open,FileAccess.Read);
                    BinaryReader by = new BinaryReader(fs);
                    int length = (int)fs.Length;
                    byte[] imgbyte = by.ReadBytes(length);

    }

     

    这是从数据库读取图片的代码,,

    {

                selectstr = "select ConditionImage from ConditionRecord where PatientsCardID=" + "\'" +       this.txtCardID.Text + "\';";
                SqlDataAdapter ada = new SqlDataAdapter(selectstr, con);
                DataTable dt=new DataTable();
                ada.Fill(dt);
                int c=dt.Rows.Count;
                byte[] pic = (byte[])dt.Rows[0]["ConditionImage"];

                 MemoryStream ms = new MemoryStream(pic);

                Image image = Image.FromStream(ms);//执行到这句话的时候就发生异常:参数无效

                 this.pictureBox1.Image = image;

    }

    还望各位高手不吝赐教?

    2010年5月17日 12:17

答案

  • 你好!

         检查一下你的ms中是否具有有效的图像格式!


    周雪峰
    2010年5月17日 14:54
    版主
  • 你好 首先请检查你的byte[] pic 是否为空,我自己做了一个测试是没有任何问题的

    你在MemoryStream后面添加一句 ms.Seek(0, SeekOrigin.Begin);

    即便不添加应该也不会出问题的 我想可能是你没有读取到byte[]

     private static void TestImageFromStream()
            {
                string str = @"D:\Raymond's Documents\My Pictures\247129.jpg";
                FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read);
                BinaryReader by = new BinaryReader(fs);
                int length = (int)fs.Length;
                byte[] imgbyte = by.ReadBytes(length);

                MemoryStream ms = new MemoryStream(imgbyte);
                ms.Seek(0, SeekOrigin.Begin);
                Image image = Image.FromStream(ms);
            }


    I see you~http://hi.baidu.com/1987raymondMy Blog~~~
    2010年5月18日 1:22
    版主

全部回复

  • 你好!

         检查一下你的ms中是否具有有效的图像格式!


    周雪峰
    2010年5月17日 14:54
    版主
  • 你好 首先请检查你的byte[] pic 是否为空,我自己做了一个测试是没有任何问题的

    你在MemoryStream后面添加一句 ms.Seek(0, SeekOrigin.Begin);

    即便不添加应该也不会出问题的 我想可能是你没有读取到byte[]

     private static void TestImageFromStream()
            {
                string str = @"D:\Raymond's Documents\My Pictures\247129.jpg";
                FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read);
                BinaryReader by = new BinaryReader(fs);
                int length = (int)fs.Length;
                byte[] imgbyte = by.ReadBytes(length);

                MemoryStream ms = new MemoryStream(imgbyte);
                ms.Seek(0, SeekOrigin.Begin);
                Image image = Image.FromStream(ms);
            }


    I see you~http://hi.baidu.com/1987raymondMy Blog~~~
    2010年5月18日 1:22
    版主
  • 是不是在使用Northwind数据库?我碰到的问题是Northwind数据库里边原有的图片好像读出有此类的问题,但是我使用类似与你上面写入图片到数据库中后再次读出就没有问题了,你尝试使用写的方法把原有的Northwind的示例数据库图片用你自己的覆盖掉然后再次读出看看呢?
    2010年5月19日 2:53
    版主