2013-01-20 9 views
5

Używam ImageTools z codeplex, aby zapisać płótno jako png; jednak miałem ten sam problem, gdy używałem writeableBitmap.SaveJpeg(). Dlatego problem nie dotyczy typu obrazu, ale raczej sposobu zapisywania lub ładowania w pliku IsolatedStorage.Zapisywanie i ładowanie obrazu do IsolatedStorage Wymaga zapisywania dwukrotnie

Po zapisaniu obrazu przez naciśnięcie przycisku zapisu plik istnieje, ale po załadowaniu obrazu nic się nie wyświetla. Jeśli zapisuję obraz dwukrotnie, obraz ładuje się i wyświetla się poprawnie.

Poniżej znajduje się mój kod.

Zapisywanie pliku:

ExtendedImage myImage = myCanvas.ToImage(); 

using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    if (isoStore.FileExists("image.png")) 
     isoStore.DeleteFile("image.png"); 

    using (var fileStream = isoStore.CreateFile("image.png")) 
    { 
     myImage.WriteToStream(fileStream, "image.png"); 
     fileStream.Close(); 
    } 
} 

ładuje plik

BitmapImage bi = new BitmapImage(); 

using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    if (isoStore.FileExists("image.png")) 
    { 
     using (var fileStream = isoStore.OpenFile("image.png", FileMode.Open)) 
     { 
      bi.SetSource(fileStream); 
      this.img.Height = bi.PixelHeight; 
      this.img.Width = bi.PixelWidth; 
      this.img.Source = bi; 
     } 
    } 
} 
+1

Po prostu wypróbowałem twój kod i wydaje się działać dobrze, zarówno na emulatorze jak na urządzeniu (Nokia Lumia 920) ... –

+0

Nieparzysta. Próbowałem na emulatorze i urządzeniu (L920, Visual Studio 2012 kierowania na Windows Phone 8.0) i błąd jest nadal na obu. Dziękuję za poinformowanie mnie, że to działa. –

Odpowiedz

0

Spróbuj ten kod, aby pobrać obraz z isoStore. Mi to pasuje.

using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
     if (iso.FileExists(string.Format("image.png"))) 
     { 
      string fileName = "image.png"; 
      string filePath = iso.GetType().GetField("m_RootDir", System.Reflection.BindingFlags.NonPublic | 
      System.Reflection.BindingFlags.Instance).GetValue(iso).ToString() + fileName; 
     } 
} 

można ustawić źródło obrazu do filePath i nie będzie miał żadnego problemu dostępu do niego.

Jeśli to nie zadziała, problem występuje podczas zapisywania obrazu. Być może trzeba będzie znaleźć obejście dla zapisania płótna na png lub jpeg.

Powiązane problemy