У меня возникают проблемы с некоторым примером кода, который я использую из одного из образцов 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();
}
}
Код должен работать в другом месте проекта, не помещая его в класс помощника/утилиты. Проблема в том, что вы не дождались своего вызова StorePhoto() из _saveItem_Click. Таким образом, создание метода async Task - это путь, ожидающий вызова. –