从Silverlight应用程序捕获屏幕以包含在打印报告中

时间:2015-03-24 11:58:49

标签: silverlight silverlight-4.0 screenshot

我希望在Silverlight应用程序的屏幕截图中包含一个报告(例如,用word文件编写)。问题是图像分辨率非常差,使用打印屏幕按钮时打印效果不理想。

有没有办法创建更好的屏幕截图?

注意:我可以访问源代码,如果需要,我可以修改应用程序。该应用程序是用Silverlight版本4编写的。

1 个答案:

答案 0 :(得分:0)

这是我用来捕获UIElement并将其保存为.png图像的示例代码。分辨率是捕获时显示元素的大小。

我使用ImageTools库中的PngEncoder。您需要在项目中添加对它的引用。

这是一个简单的XAML页面,显示带有绿色边框的蓝色方块,以及一个捕捉它的按钮:

<UserControl x:Class="SilverlightApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid x:Name="LayoutRoot">
        <StackPanel>
            <Border x:Name="myElement"
                    Width="200"
                    Height="200"
                    BorderBrush="Green"
                    Background="AliceBlue"
                    BorderThickness="2" />
            <Button Click="SaveScreenShot"
                    Content="Capture"/>
        </StackPanel>
    </Grid>
</UserControl>

这是SaveScreenShot方法:

private void SaveScreenShot(object sender, RoutedEventArgs e)
{
    //Capture the element
    var screenShot = new WriteableBitmap((UIElement)myElement, null);

    var encoder = new PngEncoder();

    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = "Picture Files (*.png)|*.png";

    bool? result = saveDialog.ShowDialog();
    if (result.Value)
    {
        using (Stream saveStream = saveDialog.OpenFile())
        {
            encoder.Encode(screenShot.ToImage(), saveStream);
        }
    }
}

单击该按钮时,将打开一个对话框,您可以将捕获的图像另存为文件。您无法使用剪贴板,因为Silverlight不允许将图像放入其中(请参阅MSDN page的“备注”部分)

因此,如果您在页面中添加带有关联方法的按钮,并将回调中的“myElement”更改为您要捕获的元素的名称,那么您应该很好。