取到的图片类型是Object型的,需要读取出来在picturebox里显示,但是捕获的错误是:参数无效            rd.GetFldVal("pic", out ob);//ob类型是Object型的,取出来的是有值的乱码
            MemoryStream s = new MemoryStream();
            s.Position = 0;
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(s, ob);
            byte[] mybytes = s.ToArray();
            MemoryStream ms = new MemoryStream(mybytes);
            try
            {
                Image img = Image.FromStream(ms);//img没有值
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());//提示参数无效
            }
应该怎么做呢?

解决方案 »

  1.   

    ob类型是Object型的,你用MessageBox.Show(ob.GetType().Name);来具体确定下他的类型,然后再做强制类型转换,而不能直接进行序列化,序列化操作本身就是错误的。
      

  2.   


    是string型的,那应该怎么处理呢?
      

  3.   

    String的话,你就要考虑图片是如何保存在这个String中的,如果这只是记录了路径,那么就按照路径来加载图片,如果是用Base64编码后的String,就用Base64反过来解码到二进制,总之是不能直接调用BinaryFormatter来序列化。
      

  4.   


    我是在做二次开发,尝试了一下,修改了图片的文件名,发现在原软件里不能显示图片了,而修改回来文件名后就能显示,应该存储的是路径。但是或取到的string是乱码,这个怎么弄呢?
      

  5.   

    终于试出来了,估计是他接口封装的有问题,感谢qldsrx            //byte[] xx = Encoding.GetEncoding("GB2312").GetBytes((string)ob);
                //byte[] byteStream = System.Text.Encoding.Default.GetBytes((string)ob);
                //byte[] yy = System.Text.Encoding.BigEndianUnicode.GetBytes((string)ob);
                byte[] y1 = System.Text.Encoding.Unicode.GetBytes((string)ob);//发现数组长度正好为图片路径和扩展名的长度
                //byte[] y2 = System.Text.Encoding.UTF8.GetBytes((string)ob);
                string a = System.Text.Encoding.ASCII.GetString(y1);//发现使用ASCII正好恢复了路径
                //string b = System.Text.Encoding.Unicode.GetString(y1);
                //string c = System.Text.Encoding.BigEndianUnicode.GetString(byteStream);