2016-09-20 12 views
0

Я пытаюсь смешать существующее изображение с другим IImageProvider, которое применяет Effect. Я заметил, что есть несколько Effect s, которые бросают InvalidArgumentException, такие как Auto Enhance и Auto Levels. Многие другие Effect s, такие как эффект Antique, не выбрасывают эту ошибку.Lumia Imaging SDK 3.0 Смешивание эффекта AutoEnhance и другого источника throw InvalidArgumentException

untitled-1

Мой код:

. . . 
SoftwareBitmapImageSource streamTextBitmapForeground = new SoftwareBitmapImageSource(normalizedTextSoftwareBitmap); 

//using (SharpnessEffect sharpenText = new SharpnessEffect(streamTextBitmapForeground, SettingsPart.SharpnessLevel)) 
using (BlendEffect blendEffect = new BlendEffect(effectBackground, streamTextBitmapForeground, BlendFunction.Normal, 1.0f)) 
using (BitmapRenderer bitmapRenderer = new BitmapRenderer(blendEffect)) 
{ 

    Bitmap bitmap = await bitmapRenderer.RenderAsync(); 
    byte[] pixelBuffer = bitmap.Buffers[0].Buffer.ToArray(); 

    using (var stream = new InMemoryRandomAccessStream()) 
    { 
     var pngEncoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream).AsTask().ConfigureAwait(false); 

     pngEncoder.SetPixelData(BitmapPixelFormat.Bgra8, 
      BitmapAlphaMode.Straight, 
      (uint)bitmap.Dimensions.Width, 
      (uint)bitmap.Dimensions.Height, 
      displayInformation.LogicalDpi, 
      displayInformation.LogicalDpi, 
      pixelBuffer); 

     await pngEncoder.FlushAsync().AsTask().ConfigureAwait(false); 

     . . . 

возникает ошибка при Bitmap bitmap = await bitmapRenderer.RenderAsync();

Может быть, мне нужно установить некоторые параметры, такие как в IMAGESIZE или что-то, но я не могу понять, что я в сообщении об ошибке отсутствует. Я пробовал использовать несколько перегрузок, но все равно не пошел. Есть идеи?

+0

Протестируйте свой код, я не могу воспроизвести вашу проблему ... Не могли бы вы предоставить более подробную информацию? Или вы могли бы предоставить образец? –

+0

Привет @Grace Фэн. Я использую образец EditShowcase из Lumia Imaging SDK GitHub. Я получил эффектBackground с помощью 'IImageProvider effectBackground = (SelectedEffect.GetEffectAsync (imageProcessorRenderer.M_Source, imageProcessorRenderer.M_SourceSize, imageProcessorRenderer.RenderSize)). Результат:« Я думаю, что возвращаемое значение вызывает проблему во время процесса смешивания. Потому что когда я сначала его отформатирую в SoftwareBitmap, а затем смешаю, ошибка не была поднята. – PutraKg

+0

Да, так как вы не размещали код вашего 'effectBackground', я сначала его отобразил' SoftwareBitmap', именно поэтому я не могу воспроизвести вашу проблему. В этом случае я буду рыть. –

ответ

0

Благодарим за сообщение об этой проблеме.

Как упомянуто David Božjak, есть некоторые известные проблемы для обработки графического процессора, вы можете попытаться установить RenderOptions только в качестве ЦП.

using (BitmapRenderer bitmapRender = new BitmapRenderer(blendeffect)) 
{ 
      bitmapRender.RenderOptions = RenderOptions.Cpu; 
      Bitmap bitmap = await bitmapRender.RenderAsync(); 
} 

Проверено на ПК Win10 14393.

+0

Проверено, работает с 'RenderOptions.Cpu' на Win10 14393 – PutraKg

+0

@PutraKg Полезно знать;) –

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

  • Нет связанных вопросов^_^