Как сохранить изображение из Nokia Imaging SDK

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

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 Imaging 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();
        }
    }

1 ответ

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

Другие вопросы по тегам