public partial classCaptureWindow : Window
{private doublex;private doubley;private doublewidth;private doubleheight;private bool isMouseDown = false;publicCaptureWindow()
{
InitializeComponent();
}private void CaptureWindow_MouseDown(objectsender, MouseButtonEventArgs e)
{
isMouseDown= true;
x= e.GetPosition(null).X;
y= e.GetPosition(null).Y;
}private void CaptureWindow_MouseMove(objectsender, System.Windows.Input.MouseEventArgs e)
{if(isMouseDown)
{//1. 通过一个矩形来表示目前截图区域
System.Windows.Shapes.Rectangle rect = newSystem.Windows.Shapes.Rectangle();double dx = e.GetPosition(null).X;double dy = e.GetPosition(null).Y;double rectWidth = Math.Abs(dx -x);double rectHeight = Math.Abs(dy -y);
SolidColorBrush brush= newSolidColorBrush(Colors.White);
rect.Width=rectWidth;
rect.Height=rectHeight;
rect.Fill=brush;
rect.Stroke=brush;
rect.StrokeThickness= 1;if (dx
{
Canvas.SetLeft(rect, dx);
Canvas.SetTop(rect, dy);
}else{
Canvas.SetLeft(rect, x);
Canvas.SetTop(rect, y);
}
CaptureCanvas.Children.Clear();
CaptureCanvas.Children.Add(rect);if(e.LeftButton ==MouseButtonState.Released)
{
CaptureCanvas.Children.Clear();//2. 获得当前截图区域
width = Math.Abs(e.GetPosition(null).X -x);
height= Math.Abs(e.GetPosition(null).Y -y);if(e.GetPosition(null).X >x)
{
CaptureScreen(x, y, width, height);
}else{
CaptureScreen(e.GetPosition(null).X, e.GetPosition(null).Y, width, height);
}
isMouseDown= false;
x= 0.0;
y= 0.0;this.Close();
}
}
}private void CaptureScreen(double x, double y, double width, doubleheight)
{int ix =Convert.ToInt32(x);int iy =Convert.ToInt32(y);int iw =Convert.ToInt32(width);int ih =Convert.ToInt32(height);
System.Drawing.Bitmap bitmap= newBitmap(iw, ih);using(System.Drawing.Graphics graphics =Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(ix, iy,0, 0, newSystem.Drawing.Size(iw, ih));
SaveFileDialog dialog= newSaveFileDialog();
dialog.Filter= "Png Files|*.png";if (dialog.ShowDialog() ==System.Windows.Forms.DialogResult.OK)
{
bitmap.Save(dialog.FileName, ImageFormat.Png);
}
}
}