Lumia 成像 SDK JpegRenderer.RenderAsync InvalidOperationException

Lumia Imaging SDK JpegRenderer.RenderAsync InvalidOperationException

我正在使用 Lumia Imaging SDK ver 2.0 在 Windows Phone 8.1 RT 应用程序中裁剪图像。代码工作正常,但 JpegRenderer.RenderAsync() 有时会抛出 InvalidOperationException, Operation is not valid due to the current state of the object.

每次使用一些图像都会重现此问题,并使应用程序崩溃。我使用以下代码进行裁剪:

using (StorageFileImageSource inputImageSource = new StorageFileImageSource(inputImageFile))
{
    using (FilterEffect filterEffect = new FilterEffect(inputImageSource))
    {
        // Create cropping filter.
        List<IFilter> filters = new List<IFilter>();
        CropFilter cropFilter = new CropFilter(croppedImageSize);
        filters.Add(cropFilter);

        // Add filters to effects.
        filterEffect.Filters = filters;

        // Create renderer with above filters and render new image.
        using (JpegRenderer renderer = new JpegRenderer(filterEffect))
        {
                IBuffer croppedImage = await renderer.RenderAsync();
                return croppedImage.ToArray();
        }
    }
}

我提到了 this resource,它说当过滤器 属性 值在渲染过程中发生变化时 JpegRenderer.RenderAsync() 抛出 InvalidOperationException。 属性 设置后我不更改它的值,那么为什么会抛出异常?

我发现了问题,正如 所说,我传递的尺寸错误,尺寸大于图像尺寸。我使用 BitmapDecoder.PixelHeightBitmapDecoder.PixelWidth 来计算尺寸。

然而,在某些包含 EXIF 数据方向数据的图像中,BitmapDecoder.PixelHeight 给出了图像的宽度,反之亦然。为此,我必须使用 BitmapDecoder.OrientedPixelHeightBitmapDecoder.OrientedPixelWidth 来获取图像的实际高度和宽度,以适应图像的方向。