[英]Invalid pointer at Nokia.Graphics.Imaging.BitmapRender.RenderAsync()
我正在使用諾基亞Imaging SDK 1.1開發圖像應用程序。 看起來很簡單的一項任務(讓用戶選擇圖像並對其應用一些過濾器)目前阻止了我2天。 我已經寫了數百行,並回顧了所有的諾基亞開發示例(大多數情況下,它們的結構非常好,但是對於像我這樣的圖像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();
因此,如果我一切都很好理解,則應用程序將崩潰,因為傳遞了某種無效的指針,但是位圖仍然有效-或至少它的大小是正確的,所以我想數據也已經傳遞了。
無論如何,這是stacktrace
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)
您沒有為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();
....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.