Исключение при рендеринге изображения с помощью Lumia Imaging SDK
В своем приложении WP8.1 я пытаюсь обрезать изображение с помощью Lumia (ранее Nokia) Imaging SDK. изображение получено с помощью FileOpenPicker
:
public async void ContinueFileOpenPicker(Windows.ApplicationModel.Activation.FileOpenPickerContinuationEventArgs args) {
if (args.Files.Count > 0) {
_stream = await args.Files[0].OpenAsync(Windows.Storage.FileAccessMode.Read);
_bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
await _bitmapImage.SetSourceAsync(_stream);
SelectedImage.Source = _bitmapImage;
}
else {
Debug.WriteLine("Operation cancelled.");
}
}
Затем фильтр применяется в обработчике кнопок (после того, как пользователь выбрал область обрезки; размеры только для целей тестирования):
private async void GetImageAcceptButton_Click(object sender, RoutedEventArgs e) {
await GetCroppedBitmapAsync();
}
async public Task GetCroppedBitmapAsync() {
using (var source = new RandomAccessStreamImageSource(_stream)) {
using (var filterEffect = new FilterEffect(source)) {
var filter = new CropFilter(new Windows.Foundation.Rect(0, 0, 100, 100));
filterEffect.Filters = new IFilter[] { filter };
var target = new WriteableBitmap(50, 50);
using (var renderer = new WriteableBitmapRenderer(filterEffect, target)) {
await renderer.RenderAsync();
SelectedImage.Source = target;
}
}
}
}
RenderAsync()
вызов вызывает исключение:
System.Runtime.InteropServices.COMException occurred
HResult=-2147467259
Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
Source=mscorlib
ErrorCode=-2147467259
Применение фильтров кажется довольно простым. Почему это терпит неудачу здесь?
1 ответ
Вы должны включить встроенную отладку и посмотреть на окно вывода. В настоящее время вы пропускаете реальное сообщение об исключении (которое пытается быть более конкретным). Строки сообщения об исключении "переправляются" через границу вызова WinRT, официально передается только HRESULT (здесь E_FAIL).
Это Silverlight 8.1 или универсальное приложение, кстати?
Мое предположение при ответе может заключаться в том, что вам нужно искать / перематывать поток назад. Может быть, что позиция в конце.