Image实现了 ISerializable接口, 理论上是可以被序列化并且通过Remoting传输的, 但事实上如果使用Remoting获取远程Image对象会抛出异常, 使用BinaryFormatter序列化Image对象得到的居然是一个全部是0的byte array, .Net Framework欺骗了我们..我觉得这是个Bug, 用反光器(Reflector..)看Image的GetObjectData方法, 其实它内部也是用一个MemoryStream来得到序列化的byte array. 但返回的竟然个全0的数组..那实现ISerializable有什么用啊?

直接获取Image不行..但还是有解决方案的, 而且很简单, 在服务器端(Image对象的宿主)加上一个属性, 返回Image的byte array, 再在客户端把byte array转换成Image就OK了..

示例代码:

服务器端:

 
        public byte[] ImageData
        {
            get
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    _image.Save(ms, ImageFormat.Png);
                    return ms.ToArray();
                }
            }
        }

客户端:

 
        Server s = (Server)Activator.GetObject(typeof(Server), "tcp://localhost:10101/WhiteBoardNetRemoting");
        byte[] data = s.ImageData;
        using (MemoryStream ms = new MemoryStream(data))
        {
            Bitmap bm = new Bitmap(ms);
            pictureBox1.Image = bm;
        }
Posted on 2006-09-13 22:17  Adrian H.  阅读(1001)  评论(3编辑  收藏  举报