2015-03-24 5 views
0

Я хочу включить в отчет (например, написанный в текстовом файле) снимок экрана из приложения Silverlight. Проблема в том, что разрешение изображения очень плохое, и напечатанный результат неудовлетворительный при использовании кнопки экрана печати.Захват экрана из приложения Silverlight для включения в печатный отчет

Есть ли способ создать лучший захват экрана?

Примечание: У меня есть доступ к исходному коду, и я могу изменить приложение, если это необходимо. Приложение написано в версии Silverlight 4.

ответ

0

Вот пример кода, который я использую для захвата 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» «в обратном вызове к имени элемента, который вы хотите захватить, вы должны быть хорошими.

+0

Привет, у меня нет кода, написанного для захвата, я только что упомянул об этом, если кто-то разместил код для этого. К сожалению, я не могу запустить ваш код, должна быть проблема с silverlight и библиотекой, поскольку после компиляции появляется пустая страница. Будет ли этот способ сохранять изображение с хорошим разрешением, подходящим для печати? – Nonen

+0

Хорошо, я неправильно понял вопрос, я думал, что у вас уже есть код. Я отредактировал ответ соответственно. В коде, который я предоставил, вам нужно заменить «myElement» корневым визуальным элементом того, что вы пытаетесь захватить. – Nooodles

 Смежные вопросы

  • Нет связанных вопросов^_^