1

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

1 に答える 1

0

これを解決するには、画像を保存するコードを、最初にそのメソッドを呼び出していたのと同じページに配置する必要がありました。また、async/await が適切に機能するように、Task タイプである必要があります。

于 2014-01-31T03:02:22.107 に答える