2013-07-05 2 views
0

При использовании этого в html-странице из IsolStorage есть что-то странное и проводное с «образным путем».Загрузка локального изображения из изолированного хранилища на страницу html

Я хочу создать html-страницу, которая будет использоваться объектом webBrowser приложения. Поэтому я создаю html-страницу в IsolStorage, а затем использую эту страницу с webBroswser.Navigate.

Все работает отлично, за исключением изображений.

1) Если я создаю html-страницу и изображения в корнеизображения Inventory, все работает нормально, работает код <img src="image.png">, и я вижу изображение на странице страницы.

2) Однако способ сохранения страниц и изображений у корневой системы не является хорошей идеей, поскольку у меня уже есть несколько каталогов, используемых приложением там, поэтому я создаю новый каталог «Html» и сохраните все страницы.

Теперь, когда я открываю эту страницу, я не вижу свое изображение. Я пробовал несколько вариантов ссылок src и до сих пор не могу найти ответ.


Что будет правильной ссылке в <img src=..."> теге, если иерархия:

IsolatedStorage -> Html (папка) -> index.html (файл)

(1) IsolatedStorage -> Html (папка) -> image.png (файл)

(2) IsolatedStorage -> Html (папка) -> Изображения (папка) -> image.png (файл)


На самом деле, я думал, что это будет что-то вроде <img src="image.png"> для (1), но я попробовал несколько аналогичных версий, и никто из них не работал.

+0

Возможный дубликат [Использовать локальные изображения в элементе управления Webbrowser] (http://stackoverflow.com/questions/10363174/use-local-images-in-webbrowser-control) –

ответ

0

Ну, это кажется немного странным:

Этот метод сохранить изображение на IsolatedStorage, но не позволит использовать его в HTML IMG тег:

  using (IsolatedStorageFile isopicsFile = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       if (isopicsFile.FileExists(Constants.HtmlFolderName + "launch.png") == false) 
       { 
        Stream yourFilepath = Application.GetResourceStream(new Uri("/someUri/launch.png", UriKind.Relative)).Stream; 

        BitmapImage b = new BitmapImage(); 
        b.SetSource(yourFilepath); 

        WriteableBitmap wb = new WriteableBitmap(b); 
        using (var isoFileStream = isopicsFile.CreateFile(Constants.HtmlFolderName + "launch.png")) 
        { 
         var width = wb.PixelWidth; 
         var height = wb.PixelHeight; 
         // Theoretically, there may be the problem, as the file extention is png, not jpg 
         System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, isoFileStream, width, height, 0, 100); 
        } 
       } 
      } 

И этот файл сохранит изображение и позволит использовать его с тегами html:

  string f = "somePath/launch.png"; 
      StreamResourceInfo sr = Application.GetResourceStream(new Uri(f, UriKind.Relative)); 
      using (BinaryReader br = new BinaryReader(sr.Stream)) 
      { 
       byte[] data = br.ReadBytes((int)sr.Stream.Length); 
       string fileName = "launch.png"; 
       string filePath = Constants.HtmlFolderName + fileName; 

       using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
       { 
        if (isoStore.FileExists(filePath)) 
        { 
         isoStore.DeleteFile(filePath); 
        } 

        using (BinaryWriter bw = new BinaryWriter(isoStore.CreateFile(filePath))) 
        { 
         bw.Write(data); 
         bw.Close(); 
        } 
       } 
      } 

Также во втором случае изображение свойства должны быть установлены в Content + Always Copy.

Смежные вопросы