Как сохранить изображение из 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 работал правильно.