2014-09-19 2 views
1

Проблема: Я хочу писать изображения в изолированное хранилище. Я использую приведенный ниже код, чтобы получить поток для изображения и записать его с использованием перезаписываемого растрового изображения в изолированное хранилище.Эта операция не поддерживается для относительной ошибки uri, когда действие сборки является содержимым/ресурсом

Что я пробовал: После прибегая к помощи, я реализовал решение ниже

String myImage = "myImage.png"; 

using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    if (myIsolatedStorage.FileExists(myImage)) 
    { 
     myIsolatedStorage.DeleteFile(myImage); 
    } 

    IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(myImage, FileMode.Create, myIsolatedStorage); 

    //Uri uri = new Uri("/myApplication;component/Images/AppIcons/" + myImage, UriKind.Relative); 
    //StreamResourceInfo sri = Application.GetResourceStream(uri); // Trying to get image whose Build action is set to 'Resource' 

    //Uri uri1 = new Uri("Images/AppIcons/White.png", UriKind.Relative); // Content 
    //StreamResourceInfo sri1 = Application.GetResourceStream(uri1); // Trying to get image whose Build action is set to 'Content' 

    string[] names = this.GetType().Assembly.GetManifestResourceNames(); 
    string name = names.Where(n => n.EndsWith(myImage)).FirstOrDefault(); 
    if (name != null) 
    { 
     // Trying to get image whose Build action is set to 'Embedded Resource' 
     Stream resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name); 

     if (resourceStream != null) 
     { 
      BitmapImage bitmap = new BitmapImage(); 
      bitmap.SetSource(resourceStream); 
      WriteableBitmap wb = new WriteableBitmap(bitmap); 

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

    fileStream.Close(); 
} 

Проблема здесь заключается в том, что, когда я пытаюсь получить изображение на Application.GetResourceStream (показано в комментировал коде выше), то результат:

эта операция не поддерживается для относительного URI

Я проверил MSDN article и эти вопросы (Get stream of local image. Windows phone 8 и Application.GetResourceStream throws IOException), чтобы проверить путь URI для изображений, но он по-прежнему не может получить StreamResourceInfo.

Когда я установил действие сборки изображений на «Embedded Resource» и попытаться получить поток с помощью GetManifestResourceStream, то он работает правильно (показано в коде выше).

Как я могу заставить его работать с изображениями с действием сборки 'Содержимое'/'Ресурс'? В нашем проекте все изображения в основном «Контент»/«Ресурс».

Любая помощь будет высоко оценена. Большое спасибо за ваше время и усилия.

+0

@Fedor - Спасибо за редактирование. Позаботится об этом в следующий раз. – DareToExplore

+0

Без проблем! Ваш вопрос был достаточно ясным (на самом деле, он был написан лучше, чем многие другие люди в SO, как правило, пишут), я просто сделал его немного более удобным для чтения. – Fedor

ответ

1
StreamResourceInfo sri1 = Application.GetResourceStream(new Uri("image.png", UriKind.Relative)); 

работает идеально для меня. Действие сборки изображения установлено на Content.

Убедитесь, что путь правильный

+0

Похож на проблему с дорожкой. Хорошо работает сейчас. – DareToExplore