我正在使用诺基亚成像SDK1.1开发一个成像应用程序。一个看起来相当简单的任务(让用户选择一个图像并对其应用一些过滤器)目前阻止了我,现在已经2天了。我已经编写了数百行代码,并对所有的Nokia Dev示例进行了回顾(大多数情况下,这些示例结构非常好,但对于像我这样的成像SDK初学者来说太复杂了),但我总是得到以下例外:
{System.NullReferenceException: Invalid pointer at Nokia.Graphics.Imaging.BitmapRenderer.RenderAsync()这是代码(为了简单起见,我减少了传递过滤器的部分,以便传递一个空的FilterEffect ):
PhotoChooserTask task = new PhotoChooserTask();
task.Completed += async (result,choosen) =>
{
Stream stream = choosen.ChosenPhoto;
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(stream);
WriteableBitmap bitmap = new WriteableBitmap(bitmapImage);
WriteableBitmapRenderer renderer = new WriteableBitmapRenderer(new FilterEffect(), bitmap, OutputOption.PreserveAspectRatio);
await renderer.RenderAsync();
};
task.ShowCamera = true;
task.Show();所以如果我对一切都很了解的话,这个应用程序就会崩溃,因为它传递了一些无效的指针,但是它的位图是有效的--或者至少它的大小是正确的,所以我想,数据也已经被传递了。
不管怎么说,这是堆栈
at Nokia.Graphics.Imaging.BitmapRenderer.RenderAsync()
at Nokia.Graphics.Imaging.WriteableBitmapRenderer.<<RenderAsync>b__0>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at RealtimeFilterDemo.MainPage.<<ShutterButton_Tap>b__1a>d__1c.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state)发布于 2014-03-27 20:09:11
您没有为FilterEffect设置源映像,而是出于某种原因将源流直接传递到目标 WriteableBitmap。
启动RenderAsync操作时,FilterEffect Source属性为null,这就是导致异常的原因。您应该将图像源传递给FilterEffect构造函数,或者设置其source属性。
我推荐一个StreamImageSource,因为您有一个带有图像数据的System.IO.Stream。
从概念上讲,这就是如何看待它:
选择光流-> StreamImageSource -> FilterEffect -> WriteableBitmapRenderer ->可写位图
更具体而言:
using(var streamSource = new StreamImageSource(stream))
using(var filterEffect = new FilterEffect(streamSource, filters))
using(var writeableBitmapRenderer = new WriteableBitmapRenderer(filterEffect, writeableBitmap))
{
await writeableBitmapRenderer.RenderAsync();
....
}https://stackoverflow.com/questions/22646280
复制相似问题