[WebMethod]
public Image GetPartitionPic(Image sourceimg,int x,int y,int width,int height)
{
Bitmap b=new Bitmap(width,height);
..............
}
运行时总报错:无法序列化,因为Image没有公有构造函数(注:我已写了构造)
上午的时候是有人在等我,我就匆忙回了几句
WebService传输图片的时候我也遇到过。
开始我传输的是byte[]数组
使用方法:
客户端:
System.IO.MemoryStream ms=new System.IO.MemoryStream();
Image img;//客户端图片来源
img.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp);//具体根据你传的图象格式定义
byte[] bs=ms.GetBuffer();
已经获取到图象的byte[]格式,就可以直接传输了
Service端:
就只需要把图片参数改为byte[]这个参数是可以直接传输的
System.IO.MemoryStream ms=new System.IO.MemoryStream(bs);
Image img=Image.FromStream(ms);
此时已经将需要传输的图片翻译回来
但此种方法不容易被其他语言调用,这种方式我写好以后,C#可以直接调用到,但使用VC++进行调用时却出现了困难,因为VC++的那个库不支持直接传输byte[]类型,解决方法是改为传输Base64编码,因为byte[]数组中可能有非可见字符,所以无法直接以字符串传输,改为Base64编码后则全部变为可见字符但由于多了一次变换,效率自然低于前一种。
客户端:
string str=Convert.ToBase64String(bs);
Service端:
需要把图片参数由byte[]改为string。(希望你传输的图片转为Base64编码后的字符数应该是不超过string类型的最大长度,否则你就得增加标志位分多次传输了,不过这也似乎是不可能的,string能存储21亿字符吧)。
解码也有方便方法:
byte[] bs=Convert.FromBase64String(str);
楼主自己选择吧.