2011-01-27 78 views
4

方案問題從隔離儲存在Windows Phone打開JPEG 7

  1. 應用程序打開
  2. 檢查是否從網絡中隔離儲存存在的背景圖像
  3. 如果不是,下載並保存它到孤立存儲
  4. 從孤立存儲中加載圖像並將其設置爲全景圖控件上的背景

問題

圖像沒有在GUI加載..當我檢查從獨立存儲接收到的字節數組,它包含字節被最初寫入的相同量,但圖像不出現。

這裏是我目前使用,試圖找出問題的一些測試代碼:

using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       if (!appStorage.FileExists(@"default.jpg")) 
       { 
        BitmapImage bmp = sender as BitmapImage; 
        byte[] bytes = bmp.ConvertToBytes(); 
        using (var inputfile = appStorage.CreateFile(@"default.jpg")) 
        { 
         inputfile.Write(bytes, 0, bytes.Length); 
        } 
       } 
       using (var isfs = appStorage.OpenFile(@"default.jpg", FileMode.OpenOrCreate, FileAccess.Read)) 
       { 
        BitmapImage bmp = new BitmapImage(); 
        bmp.SetSource(isfs); 
        MainPanorama.Background = new ImageBrush { Opacity = 0.4, Stretch = Stretch.None, ImageSource = bmp }; 
       } 
      } 

哪裏sender是從其他來源 加載圖像我試圖爲將backgroundImage上設置發件人MainPanorama控制,並且工作得很好。所以問題出在隔離存儲的加載上。

任何想法?

回答

2

編輯:這樣的聲音必須是定時或隨機訪問流的問題。

事情你可以嘗試:

  1. 嘗試在整個圖像加載到存儲器陣列 - 一個MemoryStream - 然後使用在的SetSource通話

  2. 嘗試刪除未使用的編碼 - .ImageOpened委託和img =新圖像()調用

  3. 如果這些事情沒有幫助,然後嘗試在字節級檢查兩個流。

有關1的詳細信息,請參閱How Do I Load an Image from Isolated Storage and Display it on the Device? - 注意,這是微軟官方支持樣本,它在屏幕上的圖像使用前將圖像加載到內存中的MemoryStream。

微軟的代碼:

// The image will be read from isolated storage into the following byte array 
     byte [] data; 

     // Read the entire image in one go into a byte array 
     using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      // Open the file - error handling omitted for brevity 
           // Note: If the image does not exist in isolated storage the following exception will be generated: 
      // System.IO.IsolatedStorage.IsolatedStorageException was unhandled 
      // Message=Operation not permitted on IsolatedStorageFileStream 
      using (IsolatedStorageFileStream isfs = isf.OpenFile("WP7Logo.png", FileMode.Open, FileAccess.Read)) 
      { 
       // Allocate an array large enough for the entire file 
       data = new byte[isfs.Length]; 

       // Read the entire file and then close it 
       isfs.Read(data, 0, data.Length); 
       isfs.Close(); 
      } 
     } 

     // Create memory stream and bitmap 
     MemoryStream ms = new MemoryStream(data); 
     BitmapImage bi = new BitmapImage(); 

     // Set bitmap source to memory stream 
     bi.SetSource(ms); 

     // Create an image UI element – Note: this could be declared in the XAML instead 
     Image image = new Image(); 

     // Set size of image to bitmap size for this demonstration 
     image.Height = bi.PixelHeight; 
     image.Width = bi.PixelWidth; 

     // Assign the bitmap image to the image’s source 
     image.Source = bi; 

     // Add the image to the grid in order to display the bit map 
     ContentPanel.Children.Add(image); 

請回來做什麼固定它的報告。

+0

我編輯的代碼,因爲圖像位是不打算在那裏。儘管如此,仍然沒有解決方案...我會多嘗試一下。 – 2011-01-27 15:53:21

0

我的猜測是這是一個時間問題。在UI準備好顯示圖像之前調用此代碼?如果可視化樹未完全加載,我不確定設置圖像源時會發生什麼。

嘗試這樣的僞代碼:

MyPage() { this.Loaded +=() => YourImageLoadMethod; InitializeComponent(); }

相關問題