2014-01-31 7 views
1

У меня возникают проблемы с некоторым примером кода, который я использую из одного из образцов Nokia Imaging SDK, которые они предоставляют. По сути, я пытаюсь сохранить изображение в IsolStorage. Код, который я использую повторно, успешно используется в другом месте решения, но когда я пытаюсь его использовать, ошибок нет, но он не выполняет следующие утверждения. По существу в методе StorePhoto, как только IBuffer buffer = await App.PhotoModel.RenderFullBufferAsync(); называется ошибкой, но код, ниже которого фактически выполняется операция сохранения в изолированном хранилище, запускается, поэтому изображение никогда не сохраняется.Как сохранить изображение из Nokia Imaging SDK

SavePage.xaml.cs

private static string _photoModelPath = @"\Lockscreen\v1\PhotoModel"; 
private static string _photoModelBufferFilename = @"buffer.data"; 

public async static void StorePhoto() 
    { 
     string _photoModelPath = @"\Lockscreen\v1\LockScreen"; 
     string _photoModelBufferFilename = @"buffer.data"; 

     using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (!storage.DirectoryExists(_photoModelPath)) 
      { 
       storage.CreateDirectory(_photoModelPath); 
      } 

      if (storage.FileExists(_photoModelPath + @"\" + _photoModelBufferFilename)) 
      { 
       storage.DeleteFile(_photoModelPath + @"\" + _photoModelBufferFilename); 
      } 

      IBuffer buffer = await App.PhotoModel.RenderFullBufferAsync(); //code exiting method with no error 

      if (buffer != null) 
      { 
       IsolatedStorageFileStream originalFile = storage.CreateFile(_photoModelPath + @"\" + _photoModelBufferFilename); 

       Stream bufferStream = buffer.AsStream(); 

       bufferStream.CopyTo(originalFile); 
       bufferStream.Flush(); 
       bufferStream.Close(); 
       bufferStream.Dispose(); 

       originalFile.Flush(); 
       originalFile.Close(); 
       originalFile.Dispose(); 
      }     
     } 
    } 

MainPage.xaml.cs

private async void _saveItem_Click(object sender, EventArgs e) 
    { 
     Helpers.SaveHelper.StorePhoto(); //calling the StorePhoto method here 
    } 

PhotoModel.cs (от образца Nokia изображений SDK)

/// <summary> 
    /// Renders current image with applied filters to a buffer and returns it. 
    /// Meant to be used where the filtered image is for example going to be 
    /// saved to a file. 
    /// </summary> 
    /// <returns>Buffer containing the filtered image data</returns> 
    public async Task<IBuffer> RenderFullBufferAsync() 
    { 
     using (BufferImageSource source = new BufferImageSource(_buffer)) 
     using (FilterEffect effect = new FilterEffect(source) { Filters = _components }) 
     using (JpegRenderer renderer = new JpegRenderer(effect)) 
     { 
      return await renderer.RenderAsync(); 
     } 
    } 

ответ

0

Оказывается, решить эту проблему Мне пришлось поместить код, который сохраняет изображение на той же странице, которую я изначально называл этим методом, а также он должен быть о f type, чтобы асинхронный/ожидаемый будет работать правильно.

+1

Код должен работать в другом месте проекта, не помещая его в класс помощника/утилиты. Проблема в том, что вы не дождались своего вызова StorePhoto() из _saveItem_Click. Таким образом, создание метода async Task - это путь, ожидающий вызова. –

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

  • Нет связанных вопросов^_^