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.PixelHeight
和 BitmapDecoder.PixelWidth
来计算尺寸。
然而,在某些包含 EXIF 数据方向数据的图像中,BitmapDecoder.PixelHeight
给出了图像的宽度,反之亦然。为此,我必须使用 BitmapDecoder.OrientedPixelHeight
和 BitmapDecoder.OrientedPixelWidth
来获取图像的实际高度和宽度,以适应图像的方向。
我正在使用 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.PixelHeight
和 BitmapDecoder.PixelWidth
来计算尺寸。
然而,在某些包含 EXIF 数据方向数据的图像中,BitmapDecoder.PixelHeight
给出了图像的宽度,反之亦然。为此,我必须使用 BitmapDecoder.OrientedPixelHeight
和 BitmapDecoder.OrientedPixelWidth
来获取图像的实际高度和宽度,以适应图像的方向。