Lumia Imaging SDK JpegRenderer.RenderAsync InvalidOperationException
Я использую 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
когда значение свойства фильтра изменяется во время рендеринга. Я не изменяю значение свойства после его установки, тогда почему генерируется исключение?
1 ответ
Я выяснил проблему, и, как сказал Дэвид, я передавал неправильные размеры, которые были больше, чем размер изображения. Я использовал BitmapDecoder.PixelHeight
а также BitmapDecoder.PixelWidth
рассчитать размеры.
Однако на некоторых изображениях, имеющих данные об ориентации в данных EXIF, BitmapDecoder.PixelHeight
дал ширину изображения и наоборот. Для этого мне пришлось использовать BitmapDecoder.OrientedPixelHeight
а также BitmapDecoder.OrientedPixelWidth
получить фактическую высоту и ширину изображения, учитывая ориентацию изображения.