0

私はwinphoneとnokiaのイメージングSDKの開発を始めています。私は2つの機能を持っています。

まず、以下の関数を呼び出して画像を灰色に変更します

 private async void PickImageCallback(object sender, PhotoResult e)
    {
        if (e.TaskResult != TaskResult.OK || e.ChosenPhoto == null)
        {
            return;
        }
            using (var source = new StreamImageSource(e.ChosenPhoto))
            {
                using (var filters = new FilterEffect(source))
                {
                    var sampleFilter = new GrayscaleFilter();
                    filters.Filters = new IFilter[] { sampleFilter };
                    var target = new WriteableBitmap((int)CartoonImage.ActualWidth, (int)CartoonImage.ActualHeight);
                    var renderer = new WriteableBitmapRenderer(filters, target);
                    {
                        await renderer.RenderAsync();  
                        _thumbnailImageBitmap = target;
                        CartoonImage.Source = target;
                    }
                }
            }
        SaveButton.IsEnabled = true;
    }

次に、関数を呼び出して画像をバイナリ カラーに変更します

private async void Binary(WriteableBitmap bm_image)
    {
        var target = new WriteableBitmap((int)CartoonImage.ActualWidth, (int)CartoonImage.ActualHeight);
        MemoryStream stream= new MemoryStream();
        bm_image.SaveJpeg(stream, bm_image.PixelWidth, bm_image.PixelHeight, 0, 100);

        using (var source = new StreamImageSource(stream))
        {
            using (var filters = new FilterEffect(source))
            {
                var sampleFilter = new StampFilter(5, 0.7);
                filters.Filters = new IFilter[] { sampleFilter };

                var renderer1 =new WriteableBitmapRenderer(filters, target);
                {
                    await renderer1.RenderAsync();
                    CartoonImage.Source = target;
                }
            }
        }
    }

しかし、「await renderer1.RenderAsync();」を実行すると 2 番目の関数では、機能しません。どうすれば解決できますか。そして、「await」と「async」がどのように機能するかについて説明してもらえますか?

どうもありがとうございます!

4

1 に答える 1

2

どのエラーが発生するかわからないので、ここではほとんど推測していますが、問題はソースの設定にあると確信しています。StreamImageSource を作成する前に、メモリ ストリームの位置が先頭 (0) に設定されていることを確認しましたか?

追加してみてください:

stream.Position = 0;

StreamImageSource を作成する前に。

書き込み可能なビットマップからメモリ ストリームを作成しようとする代わりに、次のことをお勧めします。

using Nokia.InteropServices.WindowsRuntime;

...

using (var source = new BitmapImageSource(bm_image.AsBitmap())
{
   ...
}
于 2014-04-07T06:23:47.777 に答える