Компонент выбора снимков экрана для Winforms (.NET) - PullRequest
0 голосов
/ 20 августа 2009

Я ищу инструмент / элемент управления / компонент, который можно использовать для позиционирования над изображением в моей форме выигрыша, и он выберет снимок экрана из определенного региона, который выберет пользователь.

Пользователь не сможет переместить эту «камеру» из формы, и после выбора частичного изображения из элемента управления изображением мне нужно, чтобы камера пометила скопированную область, закрасив ее специальным слоем, или обрезала ее вне зависимости от того, как.

Я буду благодарен за любую идею и выслушаю ваше мнение о предлагаемом компоненте.

Мы работаем с .NET FX 3.5 с приложением Winforms.

Thanx!

1 Ответ

1 голос
/ 20 августа 2009

В конструкторе формы (после вызова InitializeComponent ();) добавьте:

monitor.MouseMove += new MouseEventHandler(monitor_MouseMove);
monitor.MouseLeave += new EventHandler(monitor_MouseLeave);
monitor.MouseClick += new MouseEventHandler(monitor_MouseClick);

Теперь добавьте в свой класс Form следующее:

const int adjustX = -50;
const int adjustY = -50;

public Size boxSize = new Size(100, 100);
public int lastX = 2 * adjustX;
public int lastY = 2 * adjustY;

private void monitor_MouseMove(object sender, MouseEventArgs e) {
  if (e.X != lastX || e.Y != lastY) {
    Graphics g = monitor.CreateGraphics();

    g.CopyFromScreen(monitor.PointToScreen(new Point(lastX + adjustX, lastY + adjustY)), new Point(lastX + adjustX, lastY + adjustY), boxSize, CopyPixelOperation.DestinationInvert);

    lastX = e.X;
    lastY = e.Y;

    g.CopyFromScreen(monitor.PointToScreen(new Point(e.X + adjustX, e.Y + adjustY)), new Point(e.X + adjustX, e.Y + adjustY), boxSize, CopyPixelOperation.DestinationInvert);
  }
}

void monitor_MouseLeave(object sender, EventArgs e) {
  Graphics g = monitor.CreateGraphics();

  g.CopyFromScreen(monitor.PointToScreen(new Point(lastX + adjustX, lastY + adjustY)), new Point(lastX + adjustX, lastY + adjustY), boxSize, CopyPixelOperation.DestinationInvert);

  lastX = 2 * adjustX;
  lastY = 2 * adjustY;
}

Наконец, в вашем обработчике щелчка мыши:

void monitor_MouseClick(object sender, MouseEventArgs e) {

}

Вам нужно будет добавить все, что вы хотите сделать с выбранной областью. Вы можете скопировать его в другое графическое окно, сохранить как растровое изображение, что угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...