I have a lot of images in my assets folder of project which i need to load into memory at the start of the app. What is the best way to do it to reduce CPU load and time.
I am doing this:
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) });
        }
And then i bind this BitmapImage to an image control.
But am not exactly sure if setting the UriSource actually loads the image into memory.
I also saw the SetSourceAsync property for BitmapImage. But i am not sure how to use it in my context. Can anyone please help me with either the SetSourceAsync property or the best way to load the images....
Thanks
Since I didn't want the wrong answer to be shown I have to add another answer 10 seconds later...
Examples:
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;
}
// Or to use the System.Net.WebRequest().GetResponse().GetResponseStream()
public BitmapImage LoadImageToMemory(System.IO.Stream stream)
    {
        if (stream.CanRead)
        {
            BitmapImage image = new BitmapImage();
            try
            {
                image.BeginInit();
                image.CacheOption = BitmapCacheOption.OnLoad;
                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;
        }
        throw new Exception("Cannot read from stream");
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With