我希望在Silverlight应用程序的屏幕截图中包含一个报告(例如,用word文件编写)。问题是图像分辨率非常差,使用打印屏幕按钮时打印效果不理想。
有没有办法创建更好的屏幕截图?
注意:我可以访问源代码,如果需要,我可以修改应用程序。该应用程序是用Silverlight版本4编写的。
答案 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”更改为您要捕获的元素的名称,那么您应该很好。