У меня есть программа, которая снимает снимок выбранной области (которую я выбираю с помощью мыши) и сохраняет ее в буфер обмена. Проблема в том, что он работает только в том случае, если я делаю выбор сверху донизу. Если я попытаюсь сделать выбор в любом другом направлении (снизу вверх, справа налево, слева направо), программа выйдет из строя. Это код MouseMove:Выбор снимка экрана приводит к сбою программы C#
public void Window_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
if (this.isMouseDown)
{
double curx = e.GetPosition(null).X;
double cury = e.GetPosition(null).Y;
System.Windows.Shapes.Rectangle r = new System.Windows.Shapes.Rectangle();
SolidColorBrush brush = new SolidColorBrush(Colors.White);
r.Stroke = brush;
r.Fill = brush;
r.StrokeThickness = 1;
r.Width = Math.Abs(curx - x);
r.Height = Math.Abs(cury - y);
selekt.Children.Clear();
selekt.Children.Add(r);
Canvas.SetLeft(r, x);
Canvas.SetTop(r, y);
if (e.LeftButton == MouseButtonState.Released)
{
selekt.Children.Clear();
width = e.GetPosition(null).X - x;
height = e.GetPosition(null).Y - y;
this.CaptureScreen(x, y, width, height);
this.x = this.y = 0;
this.isMouseDown = false;
this.Close();
}
}
}
И это для CaptureScreen:
public void CaptureScreen(double x, double y, double width, double height)
{
int ix, iy, iw, ih;
ix = Convert.ToInt32(x);
iy = Convert.ToInt32(y);
iw = Convert.ToInt32(width);
ih = Convert.ToInt32(height);
Bitmap slika = new Bitmap(iw, ih, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(slika);
g.CopyFromScreen(ix, iy, 0, 0,new System.Drawing.Size(iw, ih),CopyPixelOperation.SourceCopy);
System.Windows.Forms.Clipboard.SetImage(slika);
Какая ошибка возникает? Какая линия? – TestWell
TL; DR - Я не вижу вызовов (например, «Math.Min'), которые нормализуют координаты ... Убедитесь, что вы отправили полный образец (и включили точную ошибку). –
Что такое сообщение об исключении и stacktrace? где приложение падает? – user1666620