【发布时间】:2015-03-24 11:58:48
【问题描述】:
我想在报告中包含来自 Silverlight 应用程序的屏幕截图(例如,写在 Word 文件中)。问题是图像分辨率很差,使用打印屏幕按钮时打印效果不理想。
有没有办法创建更好的屏幕截图?
注意:我可以访问源代码,如果需要,我可以修改应用程序。该应用使用 Silverlight 版本 4 编写。
【问题讨论】:
标签: silverlight silverlight-4.0 screenshot
我想在报告中包含来自 Silverlight 应用程序的屏幕截图(例如,写在 Word 文件中)。问题是图像分辨率很差,使用打印屏幕按钮时打印效果不理想。
有没有办法创建更好的屏幕截图?
注意:我可以访问源代码,如果需要,我可以修改应用程序。该应用使用 Silverlight 版本 4 编写。
【问题讨论】:
标签: silverlight silverlight-4.0 screenshot
这是我用来捕获 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”更改为你要捕获的元素的名称,你应该会很好。
【讨论】: