Copy image with alpha channel to clipboard with custom background color?

后端 未结 2 1476
一整个雨季
一整个雨季 2021-01-13 04:09

Code :

private void Foo(Canvas canvas)
{
    // The content is a bit larger...
    Size size = new Size(canvas.ActualWidth * 1.1, canvas.Act         


        
2条回答
  •  长情又很酷
    2021-01-13 04:29

    I have found a smaller and better-to-read solution, I found it at https://social.msdn.microsoft.com/Forums/vstudio/en-US/a6972b7f-5ccb-422d-b203-134ef9f10084/how-to-capture-entire-usercontrol-image-to-clipboard?forum=wpf :

    // Create a render bitmap and push the surface to it
    RenderTargetBitmap renderBitmap =
        new RenderTargetBitmap(
        (int)size.Width,
        (int)size.Height,
        96d,
        96d,
        PixelFormats.Pbgra32
    );
    
    // Render a white background into buffer for clipboard to avoid black background on some elements
    Rectangle vRect = new Rectangle()
    {
        Width = (int)size.Width,
        Height = (int)size.Height,
        Fill = Brushes.White,
    };
    vRect.Arrange(new Rect(size));
    renderBitmap.Render(vRect);
    
    // renderBitmap is now white, so render your object on it
    renderBitmap.Render(surface);
    
    // Copy it to clipboard
    try
    {
        Clipboard.SetImage(resultBitmap);
    } catch { ... }
    

提交回复
热议问题