2012-12-11 20 views
5

मेरे पास प्रोजेक्ट के मेरे संपत्ति फ़ोल्डर में बहुत सारी छवियां हैं जिन्हें मुझे ऐप की शुरुआत में स्मृति में लोड करने की आवश्यकता है। सीपीयू लोड और समय को कम करने के लिए इसे करने का सबसे अच्छा तरीका क्या है।स्मृति में छवियों को लोड करने का सबसे अच्छा तरीका?

मैं यह कर रहा हूं:

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 वास्तव में छवि को स्मृति में लोड करता है या नहीं।

मैंने बिटमैप छवि के लिए SetSourceAsync प्रॉपर्टी भी देखी। लेकिन मुझे यकीन नहीं है कि मेरे संदर्भ में इसका उपयोग कैसे किया जाए। किसी को भी कृपया मुझे या तो SetSourceAsync संपत्ति या सबसे अच्छा तरीका छवियों को लोड करने के लिए के साथ मदद कर सकते हैं ....

धन्यवाद

+0

मैं भी एक ही समस्या है। ऐसा लगता है कि WinRT छवियों को लोड करने के बारे में बेहद आलसी है ... – satur9nine

उत्तर

1

जब से मैं गलत जवाब दिखाए जाने के लिए नहीं करना चाहता था मैं एक जवाब जोड़ने के लिए 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()

उपयोग करने के लिए।। 0
+0

मैंने एक उत्तर जोड़ा जो मुझे एहसास हुआ गलत था इसलिए मैंने बस लिखा कि मैं इसे ठीक करने जा रहा हूं, यह उदाहरण पहले काम करता है और नहीं। – Deukalion

+0

अरे उत्तर के लिए धन्यवाद, लेकिन दुख की बात यह है कि यह केवल WPF ऐप के लिए काम करता है और WINRT ऐप नहीं। BitmapImage का जिक्र है कि आप "System.Windows.Media.Imaging" में हैं, लेकिन WinRT ऐप्स के लिए बिटमैप छवि "Windows.UI.Xaml.Media.Imaging" में है। और StreamSource आदि जैसे सभी गुण WinRT संस्करण – Bitsian

+0

में उपलब्ध नहीं हैं आप WinRT http://msdn.microsoft.com/library/windows/apps/BR243235 में उपलब्ध सभी गुणों के लिए इस लिंक का संदर्भ ले सकते हैं। – Bitsian

0

मामले में आप System.Drawing नाम स्थान का उपयोग करें, यह एक धारा से एक छवि आरंभ करने के लिए आसान है:

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 
} 
संबंधित मुद्दे

 संबंधित मुद्दे