簡體   English   中英

指向Nokia.Graphics.Imaging.BitmapRender.RenderAsync()的指針無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM