/// <summary>
        /// 将图片序列化为字符串的方法
        /// </summary>
        /// <param name="_Image"></param>
        /// <returns></returns>
        private string SerializeImage(Image _Image)
        {
            string menuimage = "";
            if (_Image != null)
            {
                SoapFormatter sf = new SoapFormatter();
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                sf.Serialize(ms, _Image);
                menuimage = System.Text.Encoding.Default.GetString(ms.ToArray());
                ms.Close();
                ms.Dispose();
            }
            return menuimage;        }
        /// <summary>
        /// 将字符串反序列化为图像
        /// </summary>
        /// <param name="menuimage"></param>
        /// <returns></returns>
        private Image DeserializeImage(string menuimage)
        {
            Image _Image = null;
            if (menuimage.Length > 0)
            {
                byte[] bytes = System.Text.Encoding.Default.GetBytes(menuimage);
                SoapFormatter sf = new SoapFormatter();
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                ms.Position = 0;
                ms.Write(bytes, 0, bytes.Length);
                _Image = (Image)sf.Deserialize(ms);                ms.Close();
                ms.Dispose();
            }
            return _Image;
        }        /// <summary>
        /// 按钮事件,将指定的图片序列化为字符串,并赋值给窗体的RichTextBox
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            this.richTextBox1.Text = this.SerializeImage(this.pb.Image);
        }        /// <summary>
        /// 按钮事件,将刚才序列化的字符串反序列化成图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            this.pictureBox1.Image = this.DeserializeImage(this.richTextBox1.Text);
            this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        }
button3_Click事件将图像序列化成字符串没有问题,button4_Click 将字符串反序列化为图像报错 ,提示“缺少根元素”。
我查不出原因,请高手帮忙看看 ,在线等待,立刻结贴 ,谢谢 !!

解决方案 »

  1.   

    ms.Write(bytes, 0, bytes.Length); 
    你尝试一下吧0改为78!
    如果成功我会告诉你原因,不成功就算了
    呵呵
      

  2.   

    ms.Write(bytes, 0, bytes.Length); 
    你尝试一下吧0改为78! 
    如果成功我会告诉你原因,不成功就算了 
    呵呵还是一样的错,缺少根元素 
      

  3.   

    我以前做过的事例:            //序列化            IUserReg aIUserReg = (IUserReg)aUserReg;
                //对像写进流
                MemoryStream streamw = new MemoryStream();
                BinaryFormatter f = new BinaryFormatter();
                f.Serialize(streamw, aIUserReg);     //获取流字节
                byte[] bytes = streamw.GetBuffer();
                streamw.Read(bytes, 0, bytes.Length);
                streamw.Close();
                //反序列化            MemoryStream streamr = new MemoryStream();
                //streamr.SetLength(bytes.LongLength);//可要,可不要
                streamr.Write(bytes, 0, bytes.Length);
                streamr.Position = 0;//>>>>>>>>>>>>>>>>>>>>这个也关键.
                BinaryFormatter f2 = new BinaryFormatter();
                aIUserReg = (IUserReg)f2.Deserialize(streamr);            streamr.Close();给你改一下..你自己试试看....
    命名空间:using System.Runtime.Serialization.Formatters.Binary;/// <summary> 
            /// 将图片序列化为字符串的方法 
            /// </summary> 
            /// <param name="_Image"> </param> 
            /// <returns> </returns> 
            private string SerializeImage(Image _Image) 
            { 
                string menuimage = ""; 
                if (_Image != null) 
                { 
                    BinaryFormatter sf = new BinaryFormatter(); 
                    System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
                    sf.Serialize(ms, _Image); 
                    menuimage = System.Text.Encoding.Default.GetString(ms.ToArray()); 
                    ms.Close(); 
                    ms.Dispose(); 
                } 
                return menuimage;         } 
            /// <summary> 
            /// 将字符串反序列化为图像 
            /// </summary> 
            /// <param name="menuimage"> </param> 
            /// <returns> </returns> 
            private Image DeserializeImage(string menuimage) 
            { 
                Image _Image = null; 
                if (menuimage.Length > 0) 
                { 
                    byte[] bytes = System.Text.Encoding.Default.GetBytes(menuimage); 
                    BinaryFormatter sf = new BinaryFormatter(); 
                    System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
                    ms.Position = 0; 
                    ms.Write(bytes, 0, bytes.Length); 
                    _Image = (Image)sf.Deserialize(ms);                 ms.Close(); 
                    ms.Dispose(); 
                } 
                return _Image; 
            }