Nokia が提供する Imaging SDK サンプルの 1 つから使用しているサンプル コードに問題があります。基本的に、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();
}
}