0 votes

Composant de sélection de capture d'écran pour Winforms (.NET)

Je suis à la recherche d'un outil/contrôle/composant que je peux utiliser pour positionner sur un contrôle d'image de mon formulaire Windows, et qui prendra une capture d'écran d'une région spécifique que l'utilisateur aura sélectionnée.

L'utilisateur ne pourra pas déplacer cette "caméra" hors du formulaire, et après avoir capturé l'image partielle du contrôle d'image, j'ai besoin que la caméra marque la zone copiée en la coloriant avec une couche spéciale ou en la découpant, peu importe la méthode.

Je vous serais reconnaissant pour toute idée et pour avoir votre avis sur le composant suggéré.

Nous travaillons avec .NET fx 3.5 avec une application Winforms.

Merci!

1voto

Chris Judge Points 864

Dans le constructeur de votre formulaire (après l'appel InitializeComponent();), ajoutez :

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

Ajoutez maintenant ce qui suit à votre classe 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;
}

Enfin, dans votre gestionnaire de clic de souris :

void monitor_MouseClick(object sender, MouseEventArgs e) {

}

Vous devrez ajouter ce que vous voulez faire avec la zone sélectionnée. Vous pourriez la copier dans une autre image, l'enregistrer en tant que bitmap, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X