如何将孤立的存储映像作为流?

时间:2013-04-30 19:57:17

标签: c#-4.0 windows-8 windows-phone-8 isolatedstorage

我有一个非常罕见的问题。首先让我告诉你,我想建立一个关于图像的WP8应用程序。我有一些图像存储在项目解决方案中并使用那些应用程序,它工作正常。 我正在使用一个

public Stream ImageStream
    {
        get
        {
            return this.imageStream;
        }

        set
        { 
            this.imageStream = value;
        }  

}

现在,对于项目解决方案图像,我正在调用此图像流

StreamResourceInfo imageRes = Application.GetResourceStream(new Uri("WindowsPhone;component/Images/Image1.jpg", UriKind.Relative));
    this.ImageStream = imageRes.Stream;

如果我尝试使用媒体库中的任何图像,问题就开始了。我可以将文件存储到隔离存储中,从我可以访问该文件。我正在做的是

using (IsolatedStorageFile Iso = IsolatedStorageFile.GetUserStoreForApplication())
 {
     using (var stream = new IsolatedStorageFileStream(strFileName, FileMode.Open, FileAccess.Read, Iso))
     { 
         IsolatedStorageFileStream fileStream = Iso.OpenFile(strFileName, FileMode.Open, FileAccess.Read);

                    data = new byte[stream.Length];

                    // Read the entire file and then close it
                    stream.Read(data, 0, data.Length);
                    stream.Close();                     
                }
            }
            MemoryStream ms = new MemoryStream(data);
            BitmapImage bi = new BitmapImage();

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

但是我可以使用图像文件并且可以显示但是你可以看到它是一个位图图像,因为它在隔离存储中我无法使用

StreamResourceInfo imageRes ...
this.ImageStream = ...

任何帮助我如何使用this.ImageSteam属性?欢迎任何其他想法。我实际上是WP8编程的初学者

或者让我问你一个简单的问题我如何阅读处于{存在的StreamResourceInfo的图像?

如果我能做到这一点,我的问题就解决了。请帮帮我。

2 个答案:

答案 0 :(得分:3)

* 将图像保存到隔离存储:*

String tempJPEG = "logo.jpg";

            // Create virtual store and file stream. Check for duplicate tempJPEG files.
            using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (myIsolatedStorage.FileExists(tempJPEG))
                {
                    myIsolatedStorage.DeleteFile(tempJPEG);
                }

                IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(tempJPEG);

                StreamResourceInfo sri = null;
                Uri uri = new Uri(tempJPEG, UriKind.Relative);
                sri = Application.GetResourceStream(uri);

                BitmapImage bitmap = new BitmapImage();
                bitmap.SetSource(sri.Stream);
                WriteableBitmap wb = new WriteableBitmap(bitmap);

                // Encode WriteableBitmap object to a JPEG stream.
                Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);

                //wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
                fileStream.Close();
            }

快乐编码......

答案 1 :(得分:2)

为什么要执行流副本?

http://www.windowsphonegeek.com/tips/All-about-WP7-Isolated-Storage---Read-and-Save-Images

尝试类似

的内容
BitmapImage bi = new BitmapImage();
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("logo.jpg", FileMode.Open, FileAccess.Read))
    {
        bi.SetSource(fileStream);
        this.img.Height = bi.PixelHeight;
        this.img.Width = bi.PixelWidth;
    }
}
this.img.Source = bi;