【问题标题】:Capture screen from a Silverlight Application to be included in a printed report从 Silverlight 应用程序捕获屏幕以包含在打印报告中
【发布时间】:2015-03-24 11:58:48
【问题描述】:

我想在报告中包含来自 Silverlight 应用程序的屏幕截图(例如,写在 Word 文件中)。问题是图像分辨率很差,使用打印屏幕按钮时打印效果不理想。

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

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

【问题讨论】:

    标签: silverlight silverlight-4.0 screenshot


    【解决方案1】:

    这是我用来捕获 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”更改为你要捕获的元素的名称,你应该会很好。

    【讨论】:

    • 您好,我没有为捕获编写的代码,我只是提到它以防有人发布了执行此操作的代码。不幸的是,我无法运行您的代码,silverlight 肯定有问题,并且库在编译后出现空白页。这种方法会以适合打印的良好分辨率保存图像吗?
    • 好吧,我看错了问题,我以为你已经有一些代码了。我已经相应地编辑了答案。在我提供的代码中,您需要将“myElement”替换为您要捕获的根视觉元素。
    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 2012-03-17
    • 2016-01-04
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多