2012-04-16 15 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);