Windows Phone實用開發技巧(39):WebBrowser引用獨立存儲空間中的圖片


為了節省流量,我們在程序中可能需要將圖片緩存到本地,在第二次顯示的時候就可以直接從本地讀取,而不需再次從網絡下載。

特別是新聞一類的app,顯示新聞內容的時候有時候會采用WebBrowser顯示,那么如何讓WebBrowser使用緩存的圖片呢?有兩種方法:

1. 使用圖片的絕對路徑,直接引用

2. 使用圖片的相對路徑,創建html文件顯示

本文以一個簡單demo的形式講講上述兩種方法:

首先我們將項目中的一張圖片copy至獨立存儲空間

private void SaveFilesToIsoStore()
{
    //These files must match what is included in the application package,
    //or BinaryStream.Dispose below will throw an exception.
    string[] files = { "1.jpg" };

    IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();

    if (false == isoStore.FileExists(files[0]))
    {
        foreach (string f in files)
        {
            StreamResourceInfo sr = Application.GetResourceStream(new Uri(f, UriKind.Relative));
            using (BinaryReader br = new BinaryReader(sr.Stream))
            {
                byte[] data = br.ReadBytes((int)sr.Stream.Length);
                SaveToIsoStore(f, data);
            }
        }
    }
}

private void SaveToIsoStore(string fileName, byte[] data)
{
    string strBaseDir = string.Empty;
    string delimStr = "/";
    char[] delimiter = delimStr.ToCharArray();
    string[] dirsPath = fileName.Split(delimiter);

    //Get the IsoStore.
    IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();

    //Re-create the directory structure.
    for (int i = 0; i < dirsPath.Length - 1; i++)
    {
        strBaseDir = System.IO.Path.Combine(strBaseDir, dirsPath[i]);
        isoStore.CreateDirectory(strBaseDir);
    }

    //Remove the existing file.
    if (isoStore.FileExists(fileName))
    {
        isoStore.DeleteFile(fileName);
    }

    //Write the file.
    using (BinaryWriter bw = new BinaryWriter(isoStore.CreateFile(fileName)))
    {
        bw.Write(data);
        bw.Close();
    }
}
方式一:使用絕對路徑
private void DisplayUsingAbsolutePath()
{
    string appPath = string.Format("file:///Applications/Data/{0}/Data/IsolatedStore", "ac85cd27-463a-4258-9fd2-a45dba5beb0a");
    string imgPath = appPath + "/1.jpg";
    webBrowser1.NavigateToString("<html><img src='" + imgPath + "' width=100% /></html>");
}

其中{0}是應用程序的app id,我們拼湊html,img標簽使用的src路徑為圖片的絕對路徑

方式二:使用相對路徑

private void AnotherWayToReferImageInIso()
{
    //create html
    string htmlPath = "index.htm";

    string html = "<html><img src='1.jpg' width=100% /></html>";

    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (store.FileExists(htmlPath))
        {
            store.DeleteFile(htmlPath);
        }
        using (var stream = store.CreateFile(htmlPath))
        {
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(html);
            stream.Write(buffer, 0, buffer.Length);
        }
    }

    webBrowser1.Navigate(new Uri(htmlPath, UriKind.RelativeOrAbsolute));
}

創建html文件,html引用的圖片路徑為圖片相對於html文件的路徑,然后顯示html文件即可

 

源代碼可以在這里獲取。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM