2012-04-16 2 views
0

나는 사진을 찍어서 wcf 서비스로 보내어 다른 응용 프로그램 (windows forms app)이 데이터베이스로 보낼 수 있도록합니다. 데이터베이스를 확인하고 이미지를 얻으십시오.windows phone에서 얻은 이미지를 aC# picturebox 이미지로 전송하는 방법

데이터를 데이터베이스에 바이트 배열로 추가하지만 값을 확인하면 모두 동일한 숫자가 표시되지만 데이터가 있기 때문에 작동하는 것 같습니다.

데이터를 이미지로 변환하려고 시도하면 매개 변수가 유효하지 않다는 예외가 발생합니다. 나는 이것을 수행하는 방법을 찾았지 만 (심지어 여기서도) 내가 무엇을하는지 정확하게 말하고있다. 그래서 나는 무엇이 잘못되었는지 확신하지 못한다.

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(); 
    } 

그것은 그렇지 않은 점에 유의하는 것이 좋다 :

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 메소드 호출

여기에 Windows Phone 용 내 코드입니다 배열에 전달 된 배열을 직접 사용하거나 텍스트로 변환하면 데이터베이스에 같은 내용이 표시됩니다. "VAR 이미지 = Image.FromStream (새 MemoryStream을 (g));"

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; 

하지만 항상에 나누기 :

그리고 마지막으로,이 모든 것을 보내는 응용 프로그램에서,이가 매개 변수가 유효하지 않음을 나타냅니다.

내가 왜 완전히 내 이미지의 배열을 무시하고 그것을 대체는 이미지를 얻을 수 있지만, 데이터베이스의 하나는 65 바이트이고 그들은 모두 57

말을 일단 큰 배열을 가지고 발견 57 바이트 중 65 바이트 하나?

내가 뭘 잘못하고 있니?

** * ** * ** * ** * ***편집* ** * ** * ** * ** * ** * ** * ** * ** * **** 내가 마지막으로 WCF 응용 프로그램에 디버거를 활성화 한 후 잘못 무엇을 발견

. http://www.codeproject.com/Articles/9686/Save-An-Image-Into-SQL-Server-2000-Database

는 이유가 "당신의 SQL이 잘못"유형의 오류를 던지고 참조하고 추가 방법을 사용하는 내 SQL 문을 변경 : http://msdn.microsoft.com/en-us/library/ff649234.aspx은 (모르는 사람들을 위해)

나는 여기 보았다 값을 문자열에 넣는 대신.

마지막으로 수정했습니다.

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(); 
    } 

마침내 벽에 머리를 때리고 중지 할 수 있습니다 :이 다른 nayone이 문제를 우연히 만나는 것처럼 작동 코드가 보인다. :)

답변

0

이와 같이 사용해야합니다.

// --- 버퍼에 데이터를 읽고 쓰기 MS2 ---

MemoryStream을 MS2 = 새로운 MemoryStream을();

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

// --- --- PictureBox 컨트롤에

pictureBox2.Image = 새로운 맵 (MS2)에로드;

관련 문제