標籤:style blog http io color ar os 使用 sp
前言
又是好久沒寫部落格了~~~,越來越懶,越來越沒有目標了!
本文
最近總是有人問如何通過Silverlight上傳圖片並儲存的後台伺服器?眾所周知,Silverlight是用戶端程式,不能很好與伺服器進行“溝通”,上傳圖片的方法呢大致都是通過以下流程:
1、用戶端擷取圖片-->2、轉換能夠傳輸的資料-->3、傳遞資料到服務端-->4、服務端還原資料為圖片
第一步和第四步沒有問題,問題大多出在第二步和第三步,如何得到用戶端和服務端都能識別並且容易傳遞的資料呢?
如果你使用的用戶端和服務端都是.NET方案,這就非常好辦,可以通過下面的方法:
1、用戶端得到客戶選擇的FileInfo,然後通過WebClient方法post到服務端,服務端再還原成圖片即可,詳細文章http://www.cnblogs.com/greatverve/archive/2010/07/02/silerlight-up-down.html
2、用戶端將客戶選擇的圖片檔案轉換成FileStream包裹在一個類中通過WCF傳遞到服務端,服務端再還原,詳細文章http://www.cnblogs.com/gaoweipeng/archive/2009/09/13/1565409.html
有些同學會抓耳撓腮的問,難道就沒有人用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;//顯示圖片 }程式圖片
選擇圖片介面
效果介面
程式源碼
使用vs2010 sp1+silverlight5編寫,SilverlightImageToByte
喜歡請推薦,轉載請註明出處http://www.cnblogs.com/zdp06623/p/4079482.html
Silverlight將圖片轉換為byte