0

在我正在开发的滤镜应用程序中,我想通过使用 Nokia Imaging SDK 1.1 添加捕获图像并对其应用滤镜的功能。在互联网上搜索捕获代码,我得到了这个:

await _cameraEffect.PhotoCaptureDevice.SetCaptureResolutionAsync(PhotoCaptureDevice.GetAvailableCaptureResolutions(CameraSensorLocation.Back).First());
await _cameraEffect.PhotoCaptureDevice.FocusAsync();
CameraCaptureSequence sequence = _cameraEffect.PhotoCaptureDevice.CreateCaptureSequence(1);

MemoryStream imageStream = new MemoryStream();
imageStream.Seek(0, SeekOrigin.Begin);
sequence.Frames[0].CaptureStream = imageStream.AsOutputStream();

await _cameraEffect.PhotoCaptureDevice.PrepareCaptureSequenceAsync(sequence);
await sequence.StartCaptureAsync();
        _cameraEffect.PhotoCaptureDevice.SetProperty(KnownCameraPhotoProperties.LockedAutoFocusParameters,AutoFocusParameters.None);
imageStream.Seek(0, SeekOrigin.Begin);

IBuffer frameBuffer = imageStream.GetWindowsRuntimeBuffer();
var frameSize = new Windows.Foundation.Size(_cameraEffect.PhotoCaptureDevice.CaptureResolution.Width, _cameraEffect.PhotoCaptureDevice.CaptureResolution.Height);
var scanlineByteSize = (uint)frameSize.Width * 4;
var bitmap = new Bitmap(frameSize, ColorMode.Bgra8888, scanlineByteSize, frameBuffer);
var renderer = new BitmapRenderer(new FilterEffect { Filters = _cameraEffect._filterEffect.Filters }, bitmap);
await renderer.RenderAsync();

但是当我运行这段代码时,我得到一个“{System.ArgumentException:参数不正确。

在 Nokia.Graphics.Imaging.Bitmap..ctor(Size size, ColorMode colorMode, UInt32 scanlineByteSize, IBuffer 像素) 在 RealtimeFilterDemo.MainPage.d_ 1b.MoveNext() --- 堆栈跟踪从之前抛出异常的位置结束 - -- 在 System.Runtime.CompilerServices.AsyncMethodBuilderCore.b _0(对象状态)}”。

它被扔在

var bitmap = new Bitmap(frameSize, ColorMode.Bgra8888, scanlineByteSize, frameBuffer);

这是否意味着 frameBuffer 无效?如果是这样,我该如何解决这个问题?我已经找到了一些涵盖该问题的博客文章,但他们得出的结论是他们必须使用

imageStream.Seek(0, SeekOrigin.Begin);

我已经添加了,错误消息没有任何更改。

4

0 回答 0