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 получить фактическую высоту и ширину изображения, учитывая ориентацию изображения.

Другие вопросы по тегам