2

Я разрабатываю приложение WP8 с помощью SDK для Nokia Imaging. Я пытаюсь добавить эффект фильтра к изображению и сделать его в WriteableBitmap.WriteableBitmapRenderer.RenderAsync() ArgumentException «Значение не входит в ожидаемый диапазон»

Вот мой код:

private async void PhotoChosen(object sender, PhotoResult photoResult) 
    { 
     if (photoResult != null) 
     { 
      BitmapImage bitmap = new BitmapImage(); 
      bitmap.SetSource(photoResult.ChosenPhoto); 

      WriteableBitmap wb = new WriteableBitmap(bitmap.PixelWidth, bitmap.PixelHeight); 

      StreamImageSource source = new StreamImageSource(photoResult.ChosenPhoto); 

      var effects = new FilterEffect(source); 
      effects.Filters = new IFilter[] { new SketchFilter() }; 
      var renderer = new WriteableBitmapRenderer(effects, wb); 

      await renderer.RenderAsync(); 
     } 
    } 

Все идет хорошо, но когда эта линия обработки:

await renderer.RenderAsync(); 

Это ArgumentException брошено:

Value does not fall within the expected range 

Я думаю, Ошибка была сделана при создании IImageProvider effects или WriteableBitmap wb

У кого-нибудь возникла эта проблема и возникла проблема? Спасибо :)

ответ

4

Перед настройкой источника StreamImageSource вам необходимо установить позицию потока.

BitmapImage bitmap = new BitmapImage(); 
bitmap.SetSource(photoResult.ChosenPhoto); 

WriteableBitmap wb = new WriteableBitmap(bitmap.PixelWidth, bitmap.PixelHeight); 

photoResult.ChosenPhoto.Position = 0; 

StreamImageSource source = new StreamImageSource(photoResult.ChosenPhoto); 

Вы должны сделать это, потому что вы назвали bitmap.SetSource(photoResult.ChosenPhoto). Это означает, что поток уже был прочитан один раз, поэтому его позиция находится в самом конце потока. Когда StreamImageSource пытается его прочитать, он уже в конце, поэтому «Значение не попадает в ожидаемый диапазон».

+0

Это решило проблему! TY очень! : D – McSIME

Смежные вопросы