2012-12-11 14 views
5

私は、アプリケーションの開始時にメモリにロードする必要があるプロジェクトの資産フォルダにたくさんの画像があります。 CPUの負荷と時間を削減するための最良の方法は何ですか。画像をメモリに読み込む最も良い方法は?

for (int i = 0; i < 10; i++) 
     { 
      var smallBitmapImage = new BitmapImage 
      { 
       UriSource = new Uri(string.Format("ms-appx:/Assets/Themes/{0}/{1}-small-digit.png", themeName, i), UriKind.Absolute) 
      }; 

      theme.SmallDigits.Add(new ThemeDigit<BitmapImage> { Value = i, BitmapImage = smallBitmapImage, Image = string.Format("ms-appx:/Assets/Themes/{0}/{1}-small-digit.png", themeName, i) }); 
     } 

をし、私はイメージコントロールにこのBitmapImageのバインド:

私はこれをやっています。

UriSourceを設定すると実際にイメージがメモリに読み込まれるかどうかは正確にはわかりません。

BitmapImageのSetSourceAsyncプロパティも見ました。しかし私は私の文脈でそれを使う方法がわかりません。誰も私が間違った答えが示されたくなかったので、私は別の答えを追加する必要が

おかげ

+0

私も同じ問題を抱えています。 WinRTはイメージを読み込むことについて非常に怠惰だと思われます。 – satur9nine

答えて

1

.... SetSourceAsyncプロパティや画像をロードするための最良の方法のいずれかで私を助けてください10秒後...

例:。。

BitmapImage image1 = LoadImageToMemory("C:\\image.png"); 
BitmapImage image2 = LoadImageToMemory(webRequest.GetResponse().GetResponseStream()); 

public BitmapImage LoadImageToMemory(string path) 
{ 
     BitmapImage image = new BitmapImage(); 

     try 
     { 
      image.BeginInit(); 
      image.CacheOption = BitmapCacheOption.OnLoad; 
      System.IO.Stream stream = System.IO.File.Open(path, System.IO.FileMode.Open); 
      image.StreamSource = new System.IO.MemoryStream(); 
      stream.CopyTo(image.StreamSource); 
      image.EndInit(); 

      stream.Close(); 
      stream.Dispose(); 
      image.StreamSource.Close(); 
      image.StreamSource.Dispose(); 
     } 
     catch { throw; } 

     return image; 
} 

//あるいはSystem.Net.WebRequestを(使用する)のGetResponse()GetResponseStream()

あなたが System.Drawing名前空間を使用する場合は0
+0

私は間違っていると答えたので、私はそれを修正するつもりだったと書いています。 – Deukalion

+0

お返事ありがとうございますが、悲しいことに、これはWPFアプリでのみ動作し、WInRTアプリでは動作しません。参照しているBitmapImageは "System.Windows.Media.Imaging"にありますが、WinRTアプリケーションの場合、BitmapImageは "Windows.UI.Xaml.Media.Imaging"にあります。 StreamSourceなどのすべてのプロパティは、WinRTバージョンでは利用できません。 – Bitsian

+0

WinRTで利用可能なすべてのプロパティについては、このリンクを参照してください。http://msdn.microsoft.com/library/windows/apps/BR243235 – Bitsian

0

、ストリームから画像を開始することが容易である:

try 
{ 
    var req = WebRequest.Create(photoUrl); 

    using (var response = req.GetResponse()) 
    { 
    using (var stream = response.GetResponseStream()) 
    { 
     if (stream != null) 
     { 
     var image = Image.FromStream(stream); 
     } 
    } 
    } 
} 
catch (Exception ex) 
{ 
    // handle exception 
} 
関連する問題