Я использую 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.
Lumia Imaging SDK JpegRenderer.RenderAsync InvalidOperationException
Эта проблема воспроизводится каждый раз с некоторыми изображениями и вызывает сбой приложения. Я использую следующий код для обрезки:
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
при изменении значения свойства фильтра в то время рендеринга в процессе. Я не изменяю значение свойства после его установки, тогда почему исключение выбрасывается?
Каков размер, который вы передаете в CropFilter (croppedImageSize)? Урожай принимает размер в абсолютных координатах, а размер не должен быть больше изображения, иначе будет выбрано исключение. Я не могу сказать больше без каких-либо подробностей, но это может объяснить, почему это происходит для некоторых изображений. –
Да, спасибо. Я понял. Я пропускал неправильные размеры, потому что получал неправильные значения из «BitmapDecoder» для изображений с данными EXIF. – Flipper
@ DavidBožjak, я удалил «BitmapDecoder» и использовал «ImageProperties» для расчета высоты и ширины изображения. Но это дало мне новую проблему: «ImageProperties» работает для изображения только в том случае, если расширение сохраняется. Я сохраняю изображения после удаления их расширений. Следовательно, высота/ширина изображений, хранящихся в моем приложении, равна 0. Как это можно обойти? Я действительно не хочу использовать «BitmapDecoder»; должны открыть для этого полный поток. – Flipper