1

我正在使用 Lumia Imaging SDK 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();
        }
    }
}

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

4

1 回答 1

1

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

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

于 2015-11-17T14:04:18.083 回答