Вот пример кода, который я использую для захвата UIElement и сохранения его как .png-изображения. Разрешение - это размер отображаемого элемента во время его захвата.
Я использую PngEncoder из библиотеки ImageTools. Вам нужно добавить ссылки на него в свой проект.
Вот простой 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 и библиотекой, поскольку после компиляции появляется пустая страница. Будет ли этот способ сохранять изображение с хорошим разрешением, подходящим для печати? – Nonen
Хорошо, я неправильно понял вопрос, я думал, что у вас уже есть код. Я отредактировал ответ соответственно. В коде, который я предоставил, вам нужно заменить «myElement» корневым визуальным элементом того, что вы пытаетесь захватить. – Nooodles