2012-04-16 50 views
0

我有一個Windows Phone的應用程序,拍照,並將其發送給它發送到數據庫的WCF服務,以便其他應用程序(Windows窗體應用程序)可以檢查數據庫並獲取圖像。如何傳輸從Windows手機獲得AC#PictureBox的圖像的圖像

它是將數據添加到數據庫中的字節數組,但是當我檢查的價值觀,他們都說着同樣的數字,但現在看來,這工作,因爲他們的數據在那裏。

當我試圖把這些數據轉化爲圖像,雖然,它拋出一個異常,稱該參數是無效的。我搜索瞭如何做到這一點,但我覺得(即使在這裏)說我在做什麼。所以我不確定有什麼問題。

這裏是我爲Windows Phone代碼:

if (e.TaskResult == TaskResult.OK) 
     { 
      var bitImage = new BitmapImage(); 
      bitImage.SetSource(e.ChosenPhoto); 
      //image is a Image Control in the form 
      ImageServiceClient client = new ImageServiceClient(); 

      byte[] array; 
      using(var stream = new MemoryStream()) 
      { 
       var btmMap = new WriteableBitmap(bitImage.PixelWidth, bitImage.PixelHeight); 

       // write an image into the stream 
       btmMap.SaveJpeg(stream, bitImage.PixelWidth, bitImage.PixelHeight, 0, 100); 
       array = stream.ToArray(); 
      } 
      client.AddImageAsync(array); 
     } 

最後一行調用我的WCF服務的add方法,它看起來像:

public void AddImage(byte[] array) 
    { 
     var con = 
      new MySqlConnection(
       "server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone"); 
     con.Open(); 
     string h = array.Aggregate(h, (current, b) => current + b); 
     string text = "INSERT INTO images VALUES (''," + h + ")"; 
     Console.WriteLine(text); 
     var command = new MySqlCommand(text, con); 
     var result = command.ExecuteReader(); 
     result.Close(); 
    } 

這是很好的注意,它不沒關係,如果我直接使用數組傳遞的,或者如果我把它變成文字,他們都出現在數據庫中的相同。

後來終於,在這個正在發送的一切應用程序,我有這樣的:

var con = 
      new MySqlConnection(
       "server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone"); 
     con.Open(); 
     string h = ""; 
     string text = "select Image from images where ImageId=4"; 
     var command = new MySqlCommand(text, con); 
     var dr = command.ExecuteReader(); 
     var g = new byte[] {}; 
     if(dr.Read()) 
      g = (byte[])dr[0]; 
     dr.Close(); 
     var image = Image.FromStream(new MemoryStream(g)); 
     pictureBox1.Image = image; 

但它總是打破的 「VAR圖像= Image.FromStream(新的MemoryStream(G));」說該參數是無效的。

我發現它有一個大陣一旦獲得圖像,但在一個數據庫中只有65個字節,他們都說57

爲什麼完全無視我的形象的陣列,並用替換它全部57個字節中有65個字節?

我在做什麼錯?

** * ** * ** * ** * ***編輯* ** * ** * ** * ** * ** * ** * ** * ** * ****

我終於找到了一個WCF應用中啓用調試後錯。 http://msdn.microsoft.com/en-us/library/ff649234.aspx(對於那些不知道是誰)

我也看了這裏:http://www.codeproject.com/Articles/9686/Save-An-Image-Into-SQL-Server-2000-Database

,看看它爲什麼被拋出一個「你的SQL是錯誤的」錯誤類型和改變了我的sql語句使用添加方法而不是將值放入字符串中。

問題解決了最後。工作代碼看起來像這樣nayone其他遇到這個問題:

public void AddImage(byte[] array) 
    { 
     var con = 
      new MySqlConnection("server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone"); 
     con.Open(); 
     string text = "INSERT INTO images (ImageId, Image) VALUES ('',@bytes)"; 
     var command = new MySqlCommand(text, con); 
     command.Parameters.AddWithValue("@bytes", array); 
     command.ExecuteNonQuery(); 
     con.Close(); 
    } 

我終於可以停止打我的頭撞牆。 :)

回答

0

你應該使用這樣的事情。

// ---讀取緩衝器中的數據和寫入到MS2 ---

MemoryStream的MS2 =新的MemoryStream();

ms2.Write(B,0,b.Lenght);

// ---加載它在PictureBox控制---

pictureBox2.Image =新位圖(MS2);