為了節省流量,我們在程式中可能需要將圖片緩衝到本地,在第二次顯示的時候就可以直接從本地讀取,而不需再次從網路下載。
特別是新聞一類的app,顯示新聞內容的時候有時候會採用WebBrowser顯示,那麼如何讓WebBrowser使用緩衝的圖片呢?有兩種方法:
1. 使用圖片的絕對路徑,直接引用
2. 使用圖片的相對路徑,建立html檔案顯示
本文以一個簡單demo的形式講講上述兩種方法:
首先我們將項目中的一張圖片copy至隔離儲存區 (Isolated Storage)空間
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檔案即可
原始碼可以在這裡擷取。