由于对象的当前状态,操作无效
本文关键字:状态 操作 无效 于对象 对象 | 更新日期: 2023-09-27 17:56:48
我开始开发Winphone和诺基亚成像SDK。 我有两个功能。
首先,我调用下面的函数将图像更改为灰色
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;
}
}
}
}
但是当它运行到" 等待渲染器1.RenderAsync();" 在第二个函数中,它不起作用。我该如何解决它。你可以为我解释一下"等待"和"异步"是如何工作的?
谢谢!
我主要是在这里猜测,因为我不知道你得到什么错误,但我很确定你的问题在于设置源代码。在创建 StreamImageSource 之前,是否已确保内存流位置设置为开头 (0)?
尝试添加:
stream.Position = 0;
在创建 StreamImageSource 之前。
与其尝试从可写位图创建内存流,我建议这样做:
using Nokia.InteropServices.WindowsRuntime;
...
using (var source = new BitmapImageSource(bm_image.AsBitmap())
{
...
}