2013-08-08 2 views
1

이미지를 base64 문자열로 변환해야하는 Windows Phone 애플리케이션을 개발 중이며 웹 서비스를 통해 해당 문자열을 전달해야합니다. 그래서 나는 많은 방법을 시도했지만 "Target Invocation error"오류가 발생할 때마다 보낼 수 없습니다. 이 코드를 사용하면 라이브러리에서 이미지를 선택할 수 있지만 웹 서비스를 통해 보낼 수는 없습니다. 누군가가 그것에 대해 알고 있다면Windows Phone에서 base64 문자열로 이미지를 변환하는 방법은 무엇입니까?

private void photoChooserTask_Completed(object sender, PhotoResult e) 
{ 
    BitmapImage image = new BitmapImage(); 
    image.SetSource(e.ChosenPhoto); 
    this.imageTribute.Source = image; 
    byte[] bytearray = null; 
    using (MemoryStream ms = new MemoryStream()) 
    { 

     if (imageTribute.Source == null) 
     { 

     } 
     else 
     { 
      WriteableBitmap wbitmp = new WriteableBitmap((BitmapImage)imageTribute.Source); 

      wbitmp.SaveJpeg(ms, 40, 40, 0, 82); 
      bytearray = ms.ToArray(); 
     } 
    } 
    strimage = Convert.ToBase64String(bytearray); 
} 

그래서, 나 좀 도와주세요 :

나는 이미지를 은밀한하려면 다음 코드를 사용했다. 고맙습니다.

편집

void uploadphoto() 
{ 
WebClient webClient1 = new WebClient(); 
    webClient1.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient1_DownloadStringCompleted); 
webClient1.DownloadStringAsync(new Uri("Web Service")); 
} 
void webClient1_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
{ 
var rootobject1 = JsonConvert.DeserializeObject<RootObject1>(e.Result); 
int error = rootobject1.response.errorFlag; 
    string message = rootobject1.response.msg; 
if (error == 0) 
     { 
       MessageBox.Show(message); 
     } 
    else 
     { 
       MessageBox.Show(message); 
     } 
} 
public class Response1 
{ 
public int errorFlag { get; set; } 
    public string msg { get; set; } 
    public List<string> uploadedImageNames { get; set; } 
} 
public class RootObject1 
{ 
public Response1 response { get; set; } 
} 
private void ImageUpload(object sender, RoutedEventArgs e) 
{ 
    //MessageBoxResult mb = MessageBox.Show("Select the mode of uploading the picture", "", MessageBoxButton.OKCancel); 
    Popup popup = new Popup(); 
    photoSelection photo = new photoSelection(); 
    popup.Child = photo; 
    popup.IsOpen = true; 
    photo.camera.Click += (s, args) => 
     { 
      photoCameraCapture.Show(); 
      popup.IsOpen = false; 
     }; 
    photo.library.Click += (s, args) => 
     { 
      photoChooserTask.Show(); 
      popup.IsOpen = false; 
     }; 
} 

편집 여기

StackTrace

나는 나의 오류의 스택 추적을 업로드했습니다. 그러니 확인하고 회신 해주십시오.

답변

0

A 타겟 호출 예외 오류는 여러 가지가 될 수있는 방법을 호출하는 동안 응용 프로그램이 충돌 있음을 알려줍니다. 실제 오류는 InnerException에 있습니다. TargetInvocationException 개체의 InnerException 속성에서

봐. 그러면 스택 추적과 실제 오류가 표시됩니다.

+0

코드를 편집하고 대상 호출 예외가 나타나는 이유를 알려주십시오. WebClient를 사용하여 이미지를 웹 서비스에 보냅니다. –

+0

스택 트레이스와 InnerException을 게시하십시오. – Richard210363

+0

사실 저는 개발이 새로되었습니다. 스택 추적 및 InnerException을 보는 방법을 알려주시겠습니까? –

-1

중 하나

//getting file from resource 
var resource = Application.GetResourceStream(new Uri("image.jpg", UriKind.Relative)); 
//get Stream Data 
StreamReader streamReader = new StreamReader(resource.Stream); 
//initializing bytearray to stream length 
byte[] imageData = new byte[streamReader.Length]; 
//wriing from stream to imagdata 
streamReader.Read(imageData, 0, imageData.Length); 
streamReader.Close(); 

사용 isolatedStorageFile는 격리 된 저장소 에서 읽을 이제 imageData에 이미지 데이터를 가지고 base64로 사용로 변환하는 자원이나 isolatedStorage에서 스트림으로 파일을 가져 오기 :

var baseString = Convert.ToBase64String(imageData); 
+0

를 보아라. 그러나 나는 생각하는 엄선 된 이미지의 이름을 얻을 수 없다. 어떻게 특정 이름을 부여 할 수 있습니까? –

+1

사진을 업로드하려면 multipart/form-data request를 사용해야합니다. 그렇게하려면'HttpWebRequest'를 사용하십시오. 실제로 웹 클라이언트는'Windows phone 8 '에'UploadFileAsync' 또는'DownloadFileAsync' 메소드를 가지고 있지 않습니다. –

+0

고맙습니다. 하지만 내 특정 코드에 HttpWebRequest를 사용하는 방법에 대한 샘플을 보내 주시겠습니까? –

관련 문제