• 使用.Net Remoting传送Image对象


    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;
            }
  • 相关阅读:
    【题解】Luogu P4391 [BOI2009]Radio Transmission 无线传输
    kmp匹配详解
    点分治详解
    【题解】Luogu P3871 [TJOI2010]中位数
    树链剖分详解
    【题解】Luogu P3901 数列找不同
    【题解】Luogu P1503 鬼子进村
    【题解】 P2234 [HNOI2002]营业额统计
    Splay详解
    JSOI2020备考知识点复习
  • 原文地址:https://www.cnblogs.com/Dah/p/503614.html
Copyright © 2020-2023  润新知