1

我正在尝试将现有图像与另一个IImageProviderEffect应用的图像混合。我注意到有几个Effects 会抛出 InvalidArgumentException,例如Auto Enhanceand Auto Levels。许多其他Effect的s如Antique效果不会抛出这个错误。

无标题-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();

也许我需要设置一些参数,例如图像大小或其他东西,但我无法弄清楚错误消息中缺少什么。我试过使用几个重载,但还是不行。有任何想法吗?

4

1 回答 1

1

感谢您报告此问题。

正如David Božjak 所提到的,GPU 处理存在一些已知问题,您可以尝试将其设置RenderOptions为仅 CPU。

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

在 Win10 14393 电脑上验证。

于 2016-09-26T13:05:24.820 回答