Cannot create Drop Shadow from Image created by Screen shot (capture)

142 views Asked by At

My code can make DropShadow for TextBlock but cannot create it for image if I create image from screen shot. Using normal image (Image source has been set already) problem do not occur.

I believe that problem must be in image format (somehow) I get from screen shot. Any way to convert SoftwareBitmap to other format or what to do?

(To test with TextBlock just replace Image with TextBlock in the first snippet)

Code to copy any element on the screen to image

    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;
    }

Code to make drop shadow

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

There are 0 answers