欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Silverlight将图片转换为byte的实现代码

程序员文章站 2022-11-22 11:38:16
最近总是有人问如何通过silverlight上传图片并保存的后台服务器?众所周知,silverlight是客户端程序,不能很好与服务器进行“沟通”,上传图片的方法呢大致都是...

最近总是有人问如何通过silverlight上传图片并保存的后台服务器?众所周知,silverlight是客户端程序,不能很好与服务器进行“沟通”,上传图片的方法呢大致都是通过以下流程:

  1、客户端获取图片-->2、转换能够传输的数据-->3、传递数据到服务端-->4、服务端还原数据为图片

  第一步和第四步没有问题,问题大多出在第二步和第三步,如何得到客户端和服务端都能识别并且容易传递的数据呢?

  如果你使用的客户端和服务端都是.net方案,这就非常好办,可以通过下面的方法:

  1、客户端得到客户选择的fileinfo,然后通过webclient方法post到服务端,服务端再还原成图片即可,详细文章

2、客户端将客户选择的图片文件转换成filestream包裹在一个类中通过wcf传递到服务端,服务端再还原,详细文章

  有些同学会抓耳挠腮的问,难道就没有人用silverlight传递到类似java,php的情况吗?当然有,而且我最近碰到的都是这类似的情况,事先声明我不是实在不了解java和php,我只能将图片转换成byte给你,至于你怎么还原,我只能说:”同学,任重而道远!“,不废话了,下面见分析:

  之前走了不少弯路,总是想着将writeablebitmap转换成byte(也不知道是谁上来就让用writeablebitmap转,t_t),后来我才发现其实完全没必要这么麻烦,直接上代码:

byte[] staticbyte;//全局byte,为将byte转换为image

  private void openimage()
  {
   openfiledialog imagefile = new openfiledialog()
   {
    filter = "jpeg files (*.jpg)|*.jpg|all files(*.*)|*.*"
   };
   if (imagefile.showdialog() == true)
   { 
    system.io.stream filestream=imagefile.file.openread();
    byte[] imagebyte=new byte[filestream.length];//设置byte的长度为文件流的长度
    filestream.read(imagebyte,0,imagebyte.length);//将文件流信息读取到byte数组中
    staticbyte = imagebyte;//将读取好的byte数组保存到全局
    bytetextbox.text=utf8encoding.utf8.getstring(imagebyte,0,imagebyte.length);//将byte数组显示到前台
   }
  }

直接通过filestream.read方法将文件流转换成byte,ok完工!

  后面我加了一点代码将byte又转换成图片,代码如下:

private void button1_click(object sender, routedeventargs e)
  {
   openimage();
   memorystream memorystream = new memorystream(staticbyte,0,staticbyte.length);//将byte转换为内存流
   bitmapimage img = new bitmapimage();
   img.setsource(memorystream);//设置bitmapimage的源为内存流
   this.image1.source = img;//显示图片
  }

程序图片

选择图片界面

Silverlight将图片转换为byte的实现代码

 

效果界面

Silverlight将图片转换为byte的实现代码

程序源码
  使用vs2010 sp1+silverlight5编写,silverlightimagetobyte