无法从屏幕截图(捕获)创建的图像创建阴影

时间:2017-09-01 13:48:37

标签: c# uwp uwp-xaml dropshadow windows-composition-api

我的代码可以为DropShadow制作TextBlock,但如果我从屏幕截图创建图像,则无法为图像创建它。使用普通图像(已经设置了图像源)问题不会发生。

我认为问题必须是图像格式(不知何故)我从屏幕截图中获得。有什么方法可以将SoftwareBitmap转换为其他格式或做什么?

(要使用TextBlock进行测试,只需将Image替换为第一个代码段中的TextBlock

将屏幕上的任何元素复制到图像的代码

    public static async Task<Image> GetScreenShotFromElement(FrameworkElement TargetFrameworkElement)
    {
        Image RenderedImage = new Image();
        RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(TargetFrameworkElement);
        RenderedImage.Source = renderTargetBitmap;
        return RenderedImage;
    }

制作投影的代码

public static void CreateDropShadowForImage(Image SOURCE,Grid SHADOWHERE)
{
    Visual SOURCE_Visual = ElementCompositionPreview.GetElementVisual(SOURCE);
    Compositor SOURCE_compositor = SOURCE_Visual.Compositor;
    DropShadow DROP_SHADOW = SOURCE_compositor.CreateDropShadow();
    DROP_SHADOW.Mask = SOURCE.GetAlphaMask();
    DROP_SHADOW.Offset = new Vector3(10, 10, 0);

    SpriteVisual SPRITE_VISUAL = SOURCE_compositor.CreateSpriteVisual();
    SPRITE_VISUAL.Size = SOURCE.RenderSize.ToVector2();
    SPRITE_VISUAL.Shadow = DROP_SHADOW;

    ElementCompositionPreview.SetElementChildVisual(SHADOWHERE, SPRITE_VISUAL);

    // Make sure size of shadow host and shadow visual always stay in sync
    var bindSizeAnimation = SOURCE_compositor.CreateExpressionAnimation("hostVisual.Size");
    bindSizeAnimation.SetReferenceParameter("hostVisual", SOURCE_Visual);
    SPRITE_VISUAL.StartAnimation("Size", bindSizeAnimation);

}

0 个答案:

没有答案