2013-01-20 11 views
5

キャンバスをpngとして保存するには、codeplexのImageToolsを使用しています。しかし、私はwriteableBitmap.SaveJpeg()を使用していたときに同じ問題を抱えていました。したがって、問題は画像タイプではなく、私がどのように保存またはロードするのかでIsolatedStorageです。ImageをIsolatedStorageに保存して2回保存する必要があります

保存ボタンを押して画像を保存するとファイルが存在しますが、画像を読み込むと何も表示されません。イメージを2回保存するとイメージが読み込まれ、正しく表示されます。

以下は私のコードです。

保存ファイル:

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

ロードファイル

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

ちょうどあなたのコードを試して、デバイス(Nokia Lumia 920)のようにエミュレータの両方でうまく動作しているようです... –

+0

Odd。エミュレータとデバイス(L920、Windows Phone 8.0をターゲットとするVisual Studio 2012)の両方で試しましたが、エラーは両方で持続しています。しかし、それが動作することを私に教えてくれてありがとう。 –

答えて

0

isoStoreから画像を取得するためにこのコードを試してみてください。わたしにはできる。

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

イメージのソースをfilePathに設定できます。このイメージにアクセスする際に問題は発生しません。

これで問題が解決しない場合は、画像を保存する際に問題があります。キャンバスをpngまたはjpegに保存するための回避策を見つける必要があるかもしれません。

関連する問題