2016-08-24 4 views
0

Я хочу простой экран короткий на клике.Как сделать снимок экрана в wpf?

Я создаю простой проект из формы C# windows.

Но я не могу на wpf.

Вот окна код формы:

using System.Drawing; 
using System.Windows.Forms; 

private void short_Click(object sender, EventArgs e) 
     { 
      System.Threading.Thread.Sleep(1000); 
      System.Windows.Forms.SendKeys.Send("{PRTSC}"); 
      Image img = Clipboard.GetImage(); 
      pictureBox1.Image = img; 
      img.Save("D:\\myimg.jpg"); //Its save only one picture 
     } 

Но это сохранить только один снимок.

Вопрос для МОФ:

1: Как я могу захватить экран по щелчку?

2: Как сохранить несколько изображений за раз?

Примечание:

Просто простой

Пожалуйста, помогите мне кто-нибудь

Пожалуйста

+0

Пока не ясно, что вы называете * "множественная картиной" *. Это gif? Или снимок экрана каждого окна? Или вы хотите использовать разные имена файлов каждый раз (тогда просто добавьте 'DateTime.Now.ToString()' в имя файла)? – Sinatr

+0

Чтобы получить экран для печати: http://stackoverflow.com/questions/35121443/how-to-print-a-screen-capture-in-wpf –

+0

@Sinatr Я не понял ваше решение Пожалуйста, дайте мне образец проект –

ответ

0

Я использую следующий код, чтобы создать скриншот и показать его на элемент управления WPF изображения. Вы должны быть в состоянии сохранить растровое изображение как JPEG или так

var bitmap = new Bitmap(Screen.AllScreens[SelectedScreen.Index].Bounds.Width, Screen.AllScreens[SelectedScreen.Index].Bounds.Height); 


var graphics = Graphics.FromImage(bitmap); 

graphics.CopyFromScreen(Screen.AllScreens[SelectedScreen.Index].Bounds.Left, Screen.AllScreens[SelectedScreen.Index].Bounds.Top, 0, 0, bitmap.Size); 

this.Dispatcher.Invoke(() => this.PreviewImage.Source = this.ConvertBitmapToBitmapImage(bitmap)); 
+0

@unKerativ, где он сохранит? –

+0

эй это все ошибки! https://i.imgur.com/ZznYksM.jpg –

1
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    [System.Runtime.InteropServices.DllImport("gdi32.dll")] 
    public static extern bool DeleteObject(IntPtr onj); 

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
    { 
     Bitmap bitmap; 

     bitmap = new Bitmap((int) SystemParameters.PrimaryScreenWidth,(int) SystemParameters.PrimaryScreenHeight,PixelFormat.Format32bppArgb); 

     using (Graphics g = Graphics.FromImage(bitmap)) 
     { 
      g.CopyFromScreen(0,0,0,0,bitmap.Size); 
     } 
     IntPtr handle = IntPtr.Zero; 
     try 
     { 
      handle = bitmap.GetHbitmap(); 
      ImageControl.Source = Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, 
       BitmapSizeOptions.FromEmptyOptions()); 

      bitmap.Save("D:\\1.jpg"); //saving 
     } 
     catch (Exception) 
     { 

     } 

     finally 
     { 
      DeleteObject(handle); 
     } 
    } 
} 

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication1" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 

    </Grid.RowDefinitions> 
    <Button Grid.Row="1" Height="10" Click="ButtonBase_OnClick"></Button> 
    <Image Grid.Row="0" x:Name="ImageControl"></Image> 
</Grid> 

+0

Hey Это ошибка:> Format32bppArgb –

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