A veces nos puede resultar útil o necesario capturar la pantalla del usuario. Y para esto nos podemos servir de las librerías de GDI+.
Para nuestro ejemplo usaremos un Form, un Timer y un PictureBox llamados Form1, _tmr y _pctrBx respectivamente y la propiedad Enable del Timer la establecemos en True.
Antes de nada en nuestra clase Form1 declaramos:
// Buffer de gráficos
Graphics _grphcs;
//Imagen que se mostrará en el PictureBox
Bitmap _btmp;
//Ancho de la pantalla
int _screenWidth;
//Alto de la pantalla
int _screenHeight;
Ahora en el constructor del Form, debajo de InitializeComponent establecemos las variables declaradas:
//Creamos la imagen con tamaño 150px x 150px
_btmp = new Bitmap(150, 150);
//Creamos el buffer apartir de la imagen
_grphcs = Graphics.FromImage(_btmp);
//Establecemos el ancho de la pantalla
_screenHeight = Screen.PrimaryScreen.WorkingArea.Height;
//Establecemos el alto de la pantalla
_screenWidth = Screen.PrimaryScreen.WorkingArea.Width;
Ahora en el evento Tick del Timer añadimos el siguiente código:
//Obtenemos la posición del cursor
Point _pnt = Cursor.Position;
//Centramos el cursor
_pnt.X -= 75;
_pnt.Y -= 75;
//Rellenamos la imagen de negro para las zonas no visibles
_grphcs.FillRectangle(Brushes.Black, new Rectangle(0,0,150,150));
//Obtenemos la captura de la pantalla usando la posicion que obtuvimos
//antes del cursor, copiamos la imagen en la posición (0,0) y usamos
//el tamaño de siempre
_grphcs.CopyFromScreen(_pnt, new Point(0, 0), _btmp.Size);
//Por último establecemos el BitMap como imagen del PictureBox
_pctrBx.Image = _btmp;
El código completo sería:
public partial class Form1 : Form
{
// Buffer de gráficos
Graphics _grphcs;
//Imagen que se mostrará en el PictureBox
Bitmap _btmp;
//Ancho de la pantalla
int _screenWidth;
//Alto de la pantalla
int _screenHeight;
public Form1()
{
InitializeComponent();
//Creamos la imagen con tamaño 150px x 150px
_btmp = new Bitmap(150, 150);
//Creamos el buffer apartir de la imagen
_grphcs = Graphics.FromImage(_btmp);
//Establecemos el ancho de la pantalla
_screenHeight = Screen.PrimaryScreen.WorkingArea.Height;
//Establecemos el alto de la pantalla
_screenWidth = Screen.PrimaryScreen.WorkingArea.Width;
}
private void _myTimer_Tick(object sender, EventArgs e)
{
//Obtenemos la posición del cursor
Point _pnt = Cursor.Position;
//Centramos el cursor
_pnt.X -= 75;
_pnt.Y -= 75;
//Rellenamos la imagen de negro para las zonas no visibles
_grphcs.FillRectangle(Brushes.Black, new Rectangle(0,0,150,150));
//Obtenemos la captura de la pantalla usando la posicion que obtuvimos
//antes del cursor, copiamos la imagen en la posición (0,0) y usamos
//el tamaño de siempre
_grphcs.CopyFromScreen(_pnt, new Point(0, 0), _btmp.Size);
//Por último establecemos el BitMap como imagen del PictureBox
_pctrBx.Image = _btmp;
}
}
Podéis descargar el código fuente aquí.
Espero que os sea útil.
Ummm… curioso… así obtenemos varias capturas… con lo cual podemos… jejejeje [:)]
Eso y para capturar las imagenes desde una webcam???
como seria
saludos.