0

왜 다른 일을 시도하는지 2 일 동안 알지 못합니다. WriteableBitmap 줄에서 NRP를 계속 가져옵니다. 스트림을 닫고 플러시 (및 함께)하려고했습니다.
모든 아이디어가 인정 될 것입니다.Null 참조 WP7에서 이미지를 저장하려고 할 때 WriteableBitmap에서 포인터 오류가 발생했습니다.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
     XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); 
     XDocument document = XDocument.Load(myIsolatedStorage.OpenFile("Selections.xml", FileMode.Open)); 
     MyClass enclaves = (MyClass)serializer.Deserialize(document.CreateReader()); 
     enclavesList.ItemsSource = enclaves.Collection1; 

      foreach (XElement xencl in document.Descendants("rest")) 
       { 

      WebClient downloader = new WebClient(); 
      String theelement = xencl.Element("couplink").Value; 
      String nameElement = xencl.Element("coup").Value; 
      String uriring = theelement.ToString(); 
      Uri uri = new Uri(uriring, UriKind.RelativeOrAbsolute); 
      downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(enclavesDownloaded); 
      downloader.DownloadStringAsync(uri); 

      Random random = new Random(); 
      int randomNumber = random.Next(0, 100); 

      using (IsolatedStorageFile newIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       String tempJPEG = randomNumber.ToString(); 

       IsolatedStorageFileStream fileStream = newIsolatedStorage.CreateFile(tempJPEG); 
       //fileStream.Close(); 
       //fileStream.Flush(); 
       BitmapImage image = new BitmapImage(new Uri("" + uri)); 
       image.CreateOptions = BitmapCreateOptions.None; 
       WriteableBitmap wb = new WriteableBitmap(image); 
       System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85); 
       } 
      } 
     } 

내가 장님이고 지금 무엇을 해야할지 모를 때까지 봤어. 여러분 모두 미리 감사드립니다.

답변

0

과 같이, "새로운 BitmapImage"행하기 전에 이미지에 핸들러를 추가

this.Image.ImageOpened += ImageOpened; 
this.Image.ImageFailed += ImageFailed; 

을 그런 다음 ImageOpened 이벤트에서 WriteableBitmap에 저장합니다

private void ImageOpened(object sender, RoutedEventArgs e) 
{ 
    WriteableBitmap wb = new WriteableBitmap((BitmapImage)sender); 

     using (IsolatedStorageFile newIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      String tempJPEG = randomNumber.ToString(); 

      IsolatedStorageFileStream fileStream = newIsolatedStorage.CreateFile(tempJPEG); 
      //fileStream.Close(); 
      //fileStream.Flush(); 
      BitmapImage image = new BitmapImage(new Uri("" + uri)); 
      image.CreateOptions = BitmapCreateOptions.None; 
      System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85); 
      } 
} 

당신은 시도 이미지가로드되기 전에 이미지를 저장하므로 null 포인터 예외가 발생합니다.

+0

감사합니다. philorube. 내 코드를 약간 재구성했지만 최종 파일 저장 중에 슬래시를 추가하는 것과 함께 호출이되었습니다. – NoJoeGo

+0

다행스럽게 도울 수있었습니다! 나는 비슷한 문제를 가지고 있었다. :) – philorube

+0

잘 작동하지만 새 코드가 올바르지 않습니다. 두 번째 파싱 메서드를 루프에서 실행하여 문자열을 가져오고 반복하지 않습니다 ... 문자열을 전달하는 사용자 지정 이벤트를 수행하는 방법을 알아 내야합니다. MS에서의 예제는 실제로 전혀 좋지 않습니다. 가방 속의 힌트가 있습니까? – NoJoeGo

0

격리 된 저장소에 여러 이미지를 다운로드하고 WP에서 파일 이름을 유지하려고 시도한 모든 사용자에게 게시합니다. 첫 x 째 다운로드 된 xml 파일의 파일 이름이있는 URL 경로가 필요하며 경로를 제거한 다음 원래 이름으로 파일을 저장합니다. 일부 코드를 빌려서 (특히 philorube 덕분에), 다른 사람에게 편지를 쓰고 여기에 오기 위해 저주를했지만 작동합니다.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 

     XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); 
     XDocument document = XDocument.Load(myIsolatedStorage.OpenFile("Selections.xml", FileMode.Open)); 
     MyClass enclaves = (MyClass)serializer.Deserialize(document.CreateReader()); 


     foreach (var xe in document.Descendants("couplink")) 
     { 
      mane = xe.Value.ToString(); 
      WebClient webClient = new WebClient(); 
      Uri uri = new Uri(mane, UriKind.RelativeOrAbsolute); 
      webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted); 
      webClient.OpenReadAsync((uri),mane); 
     } 
    } 

    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
    { 
     int count; 
     Stream stream = e.Result; 
     byte[] buffer = new byte[1024]; 
     String imgName = (string)e.UserState; 
     String cleanImgName = System.IO.Path.GetFileName(imgName); 
     using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      using (System.IO.IsolatedStorage.IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(cleanImgName, FileMode.Create, isf)) 
      { 
       count = 0; 
       while (0 < (count = stream.Read(buffer, 0, buffer.Length))) 
       { 
        isfs.Write(buffer, 0, count); 
       } 
       stream.Close(); 
       isfs.Close(); 
      } 
     }