2016-09-20 4 views
0

Effect이 적용된 다른 IImageProvider과 기존 이미지를 혼합하려고합니다. 나는 Auto EnhanceAuto Levels과 같이 InvalidArgumentException을 throw하는 여러 개의 Effect이 있음을 확인했습니다. Antique 효과와 같이 많은 다른 Effect이이 오류를 발생시키지 않습니다.Lumia 이미징 SDK 3.0 혼합 자동 노출 효과 및 기타 소스 throw InvalidArgumentException

untitled-1

내 코드 :

는 오류가 Bitmap bitmap = await bitmapRenderer.RenderAsync();

에서 발생

. . . 
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); 

     . . . 

아마도 나는 imagesize이나 뭐 같은 몇 가지 매개 변수를 설정해야하지만 알아낼 수 없습니다 내가 오류 메시지에서 누락되었습니다. 몇 가지 오버로드를 사용해 보았지만 여전히 문제가 없습니다. 어떤 아이디어?

+0

코드를 테스트 한 결과 문제가 재현되지 않습니다 ... 자세한 정보를 제공해 주시겠습니까? 아니면 샘플을 제공해 주시겠습니까? –

+0

안녕하세요 @Grace Feng. Lumia Imaging SDK GitHub의 EditShowcase 샘플을 사용하고 있습니다. 나는 IImageProvider를 사용하여 effectBackground를 얻었습니다. effectBackground = (SelectedEffect.GetEffectAsync (imageProcessorRenderer.M_Source, imageProcessorRenderer.M_SourceSize, imageProcessorRenderer.RenderSize)). 결과;'반환 값으로 인해 블렌딩 프로세스에서 문제가 발생한다고 생각합니다. 처음에 SoftwareBitmap에 렌더링 한 다음 오류를 혼합했기 때문에 오류가 발생하지 않았습니다. – PutraKg

+0

예, 'effectBackground'의 코드를 게시하지 않았기 때문에 먼저 'SoftwareBitmap'에 렌더링했습니다. 그 이유는 문제를 재현 할 수없는 이유입니다. 나는이 경우에 파기를 계속할 것이다. –

답변

0

이 문제를보고 해 주셔서 감사합니다.

언급 한대로 David Božjak에는 GPU 처리에 대한 몇 가지 알려진 문제가 있으며 CPU로만 RenderOptions을 설정하려고 할 수 있습니다.

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

Win10 14393 PC에서 확인되었습니다.

+0

Win10에서 'RenderOptions.Cpu' 작업 확인 됨 14393 – PutraKg

+0

@PutraKg 잘 알고 있습니다;) –