Исключение при рендеринге изображения с помощью 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 или универсальное приложение, кстати?

Мое предположение при ответе может заключаться в том, что вам нужно искать / перематывать поток назад. Может быть, что позиция в конце.

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