Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

CSharp: Capturar pantalla screenshot con Visual C#
Visual Studio .NET


Tutorial donde explicamos cómo funciona la aplicación open source AjpdSoft Capturar Pantalla C#, desarrollada con Microsoft Visual C# C Sharp de Microsoft Visual Studio .Net 2010. Explicamos cómo hacer un screenshot (captura de pantalla), cómo mostrar la imagen en el formulario de la aplicación y cómo guardarla con formato JPEG, BMP, PNG, TIFF y WMF.



Videotutorial AjpdSoft Capturar Pantalla C#

A continuación mostramos un videotutorial sobre el funcionamiento de AjpdSoft Capturar Pantalla C#:

Instalación de Microsoft Visual Studio .Net

Para desarrollar la aplicación que nos permita capturar la pantalla en una imagen (screenshot) usaremos el lenguaje de programación Microsoft Visual C# ó Visual C Sharp. Dicho lenguaje de programación pertenece a la suite de programación (entorno o IDE) Microsoft Visual Studio .Net. En el siguiente tutorial explicamos cómo instalar esta suite de desarrollo:

Nuevo proyecto Visual C# para screenshot

Abriremos Visual Studio .Net, pulsaremos en "Archivo" - "Nuevo proyecto":

Nuevo proyecto Visual C# para screenshot

Seleccionaremos en la parte izquierda "Otros lenguajes" - "Visual C#", en la parte derecha seleccionaremos "Aplicación de Windows Form", en "Nombre" introduciremos el nombre del proyecto, por ejemplo "AjpdSoftCapturarPantalla":

Nuevo proyecto Visual C# para screenshot

Añadiremos los siguientes componentes al formulario principal de la aplicación, como mostramos en la imagen:

  • System.Windows.Forms.Button: añadiremos tres botones para hacer el pantallazo o captura de pantalla (screenshot), para seleccionar el destino donde se guardará el fichero de imagen con la captura de pantalla y el botón de guardar la imagen.
  • System.Windows.Forms.PictureBox: añadiremos un PictureBox que será donde mostremos la imagen capturada del pantallazo.
  • System.Windows.Forms.ComboBox: añadiremos una lista desplegable que será donde mostremos los formatos de imagen disponibles: JPEG, PNG, TIFF, BMP y WMF.
  • System.Windows.Forms.TextBox: añadiremos un cuadro de texto donde el usuario introducirá la unidad, carpeta y nombre del fichero de destino para guardar el pantallazo on screenshot.
  • System.Windows.Forms.SaveFileDialog: añadiremos un cuadro de diálogo para selección de unidad, carpeta y nombre de fichero donde guardar la imagen de la captura de pantalla o pantallazo.

Nuevo proyecto Visual C# para screenshot

A continuación indicamos el código de las partes más importantes de la aplicación AjpdSoft Capturar Pantalla C#:

Los imports que necesitaremos:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;

  • Botón "Capturar pantalla":
        private void btCapturarPantalla_Click(object sender, EventArgs e)
        {
            if (!System.IO.File.Exists(txtUbicacionCaptura.Text))
            {
                try
                {
                    //Comprobamos si la ventana está maximizada, si lo está
                    //la dejamos en Normal para que funcione el hide
                    if (this.WindowState == FormWindowState.Maximized)
                    {
                        this.WindowState = FormWindowState.Normal;
                    }
                    //ocultamos la ventana de la aplicación para que 
                    //no aparezca en la captura de pantalla
                    this.Hide();

                    //esperamos unos milisegundos para asegurarnos que 
                    //se ha ocultado la ventana
                    System.Threading.Thread.Sleep(250);

                    //obtenemos la resolución de pantalla
                    Rectangle tamanoEscritorio = 
                        Screen.GetBounds(this.ClientRectangle);

                    //creamos un Bitmap del tamaño de nuestra pantalla
                    Bitmap objBitmap = new Bitmap(tamanoEscritorio.Width, 
                        tamanoEscritorio.Height);
                    //creamos el gráifco en base al Bitmap objBitmap 
                    Graphics objGrafico = Graphics.FromImage(objBitmap);
                    //transferimos la captura al objeto objGrafico en 
                    //base a las medidas del bitmap
                    objGrafico.CopyFromScreen(0, 0, 0, 0, objBitmap.Size);
                    //liberamos el gráfico de memoria                            
                    objGrafico.Flush();
                    //mostramos la captura de memoria a la ventana de la aplicación
                    imgCaptura.SizeMode = PictureBoxSizeMode.StretchImage;
                    imgCaptura.Image = objBitmap;
                    imgCaptura.Visible = true;

                    /* Si queremos crear el PictureBox en tiempo de ejecución
                    var imgPictureBox = new PictureBox();
                    imgPictureBox.Location = new System.Drawing.Point(15, 89);
                    imgPictureBox.Size = new System.Drawing.Size(609, 332);
                    imgPictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
                    imgPictureBox.Image = objBitmap;
                    Controls.Add(imgPictureBox);
                    imgPictureBox.Visible = true;
                     */
                }
                catch (Exception objError)
                {
                    MessageBox.Show(objError.ToString(), "Error",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    this.Show();
                }
            }
            else
            {
                MessageBox.Show("Ya existe un fichero de imagen con ese " +
                    "nombre, seleccione otra ruta o nombre de fichero.", "Atención",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

  • Evento "SelectedValueChanged" del lsFormatoImagen (ComboBox) añadiremos el siguiente código:
        private void lsFormatoImagen_SelectedValueChanged(object sender, 
            EventArgs e)
        {
            //si el usuario cambia el formato de la imagen destino
            //y ya hay algo escrito en txtUbicacionCaptura, 
            //cambiaremos la extensión del fichero por la 
            //seleccionada en el formato
            string ficheroCaptura = "";
            ficheroCaptura = txtUbicacionCaptura.Text;
            if (ficheroCaptura != "")
            {
                ficheroCaptura = System.IO.Path.GetDirectoryName(ficheroCaptura) + 
                    System.IO.Path.DirectorySeparatorChar + 
                    System.IO.Path.GetFileNameWithoutExtension(ficheroCaptura) + 
                    "." + lsFormatoImagen.Text.ToLower();
                txtUbicacionCaptura.Text = ficheroCaptura;
            }
        }

  • Botón "..." (seleccionar imagen de destino):
        private void bSelDestino_Click(object sender, EventArgs e)
        {
            string formatoImagen = "";
            formatoImagen = lsFormatoImagen.Text;

            if (formatoImagen != "")
            {
                dlGuardarImagen.Title = "Selección de carpeta y fichero de " +
                    "imagen donde se guardará la captura";
                dlGuardarImagen.Filter = "Imágenes " + formatoImagen +
                    " (*." + formatoImagen.ToLower() + ")|*." + 
                    formatoImagen.ToLower() +
                    "|Todos los ficheros (*.*)|*.*";
                dlGuardarImagen.DefaultExt = formatoImagen.ToLower();
                dlGuardarImagen.FilterIndex = 1;
                if (dlGuardarImagen.ShowDialog() == DialogResult.OK)
                {
                    txtUbicacionCaptura.Text = dlGuardarImagen.FileName;
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar el formato para la imagen.", 
                    "Atención",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                lsFormatoImagen.Focus();
            }
        }
  • Botón "Guardar":
        private void btGuardar_Click(object sender, EventArgs e)
        {
            if (imgCaptura.Image != null)
            {
                string formatoImagen = "";
                formatoImagen = lsFormatoImagen.Text;
                if (formatoImagen != "")
                {
                    if (txtUbicacionCaptura.Text != "")
                    {
                        //guardarmos la imagen en el formato indicado por el usuario
                        if (System.IO.Directory.Exists(
                            System.IO.Path.GetDirectoryName(txtUbicacionCaptura.Text)))
                        {
                            if (formatoImagen == "PNG")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Png);
                            }
                            if (formatoImagen == "BMP")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Bmp);
                            }
                            if (formatoImagen == "JPEG")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Jpeg);
                            }
                            if (formatoImagen == "TIFF")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Tiff);
                            }
                            if (formatoImagen == "WMF")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Wmf);
                            }
                        }
                        else
                        {
                            MessageBox.Show("La carpeta de destino de la imagen " +
                                "capturada debe existir.", "Atención",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            bSelDestino.Focus();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Debe indicar una carpeta y nombre de fichero " +
                            "para guardar la imagen capturada.", "Atención",
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        bSelDestino.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar el formato para la imagen. ", 
                        "Atención",
                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    lsFormatoImagen.Focus();
                }
            }
            else
            {
                MessageBox.Show("Debe capturar previamente una imagen.", "Atención",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    btCapturarPantalla.Focus();
            }
        }

AjpdSoft Capturar Pantalla C#

A continuación mostramos la aplicación AjpdSoft Capturar Pantalla C# funcionando, para capturar la pantalla actual y realizar un pantallazo pulsaremos en "Capturar pantalla":

AjpdSoft Capturar Pantalla C#

La aplicación se ocultará y realizará el screenshot o pantallazo, mostrará la imagen adquirida en la ventana de la aplicación. Para guardar esta imagen en fichero, en "Guardar imagen" seleccionaremos el "Formato", pulsaremos en "..." para seleccionar el destino de la imagen:

AjpdSoft Capturar Pantalla C#

Seleccionaremos una carpeta y un nombre para guardar el pantallazo:

AjpdSoft Capturar Pantalla C#

Por último pulsaremos en "Guardar" y ya tendremos el pantallazo o screenshot o captura de pantalla guardado en fichero de imagen con el formato elegido (JPEG, BMP, PNG, TIFF o WMF):

AjpdSoft Capturar Pantalla C#

Código fuente open source completo AjpdSoft Capturar Pantalla C#

A continuación mostramos el listado del código fuente de la aplicación AjpdSoft Capturar Pantalla C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace AjpdSoftCapturaPantalla
{
    public partial class formCapturarPantalla : Form
    {
        public formCapturarPantalla()
        {
            InitializeComponent();
        }

        private void btCapturarPantalla_Click(object sender, EventArgs e)
        {
            if (!System.IO.File.Exists(txtUbicacionCaptura.Text))
            {
                try
                {
                    //Comprobamos si la ventana está maximizada, si lo está
                    //la dejamos en Normal para que funcione el hide
                    if (this.WindowState == FormWindowState.Maximized)
                    {
                        this.WindowState = FormWindowState.Normal;
                    }
                    //ocultamos la ventana de la aplicación para que 
                    //no aparezca en la captura de pantalla
                    this.Hide();

                    //esperamos unos milisegundos para asegurarnos que 
                    //se ha ocultado la ventana
                    System.Threading.Thread.Sleep(250);

                    //obtenemos la resolución de pantalla
                    Rectangle tamanoEscritorio = 
                        Screen.GetBounds(this.ClientRectangle);

                    //creamos un Bitmap del tamaño de nuestra pantalla
                    Bitmap objBitmap = new Bitmap(tamanoEscritorio.Width, 
                        tamanoEscritorio.Height);
                    //creamos el gráifco en base al Bitmap objBitmap 
                    Graphics objGrafico = Graphics.FromImage(objBitmap);
                    //transferimos la captura al objeto objGrafico en 
                    //base a las medidas del bitmap
                    objGrafico.CopyFromScreen(0, 0, 0, 0, objBitmap.Size);
                    //liberamos el gráfico de memoria                            
                    objGrafico.Flush();
                    //mostramos la captura de memoria a la ventana de la aplicación
                    imgCaptura.SizeMode = PictureBoxSizeMode.StretchImage;
                    imgCaptura.Image = objBitmap;

                    imgCaptura.Visible = true;

                    /* Si queremos crear el PictureBox en tiempo de ejecución
                    var imgPictureBox = new PictureBox();
                    imgPictureBox.Location = new System.Drawing.Point(15, 89);
                    imgPictureBox.Size = new System.Drawing.Size(609, 332);
                    imgPictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
                    imgPictureBox.Image = objBitmap;
                    Controls.Add(imgPictureBox);
                    imgPictureBox.Visible = true;
                     */
                }
                catch (Exception objError)
                {
                    MessageBox.Show(objError.ToString(), "Error",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    this.Show();
                }
            }
            else
            {
                MessageBox.Show("Ya existe un fichero de imagen con ese " +
                    "nombre, seleccione otra ruta o nombre de fichero.", "Atención",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void bSelDestino_Click(object sender, EventArgs e)
        {
            string formatoImagen = "";
            formatoImagen = lsFormatoImagen.Text;

            if (formatoImagen != "")
            {
                dlGuardarImagen.Title = "Selección de carpeta y fichero de " +
                    "imagen donde se guardará la captura";
                dlGuardarImagen.Filter = "Imágenes " + formatoImagen +
                    " (*." + formatoImagen.ToLower() + ")|*." + 
                    formatoImagen.ToLower() +
                    "|Todos los ficheros (*.*)|*.*";
                dlGuardarImagen.DefaultExt = formatoImagen.ToLower();
                dlGuardarImagen.FilterIndex = 1;
                if (dlGuardarImagen.ShowDialog() == DialogResult.OK)
                {
                    txtUbicacionCaptura.Text = dlGuardarImagen.FileName;
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar el formato para la imagen.", 
                    "Atención",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                lsFormatoImagen.Focus();
            }
        }

        private void btGuardar_Click(object sender, EventArgs e)
        {
            if (imgCaptura.Image != null)
            {
                string formatoImagen = "";
                formatoImagen = lsFormatoImagen.Text;
                if (formatoImagen != "")
                {
                    if (txtUbicacionCaptura.Text != "")
                    {
                        //guardarmos la imagen en el formato indicado por el usuario
                        if (System.IO.Directory.Exists(
                            System.IO.Path.GetDirectoryName(txtUbicacionCaptura.Text)))
                        {
                            if (formatoImagen == "PNG")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Png);
                            }
                            if (formatoImagen == "BMP")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Bmp);
                            }
                            if (formatoImagen == "JPEG")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Jpeg);
                            }
                            if (formatoImagen == "TIFF")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Tiff);
                            }
                            if (formatoImagen == "WMF")
                            {
                                imgCaptura.Image.Save(txtUbicacionCaptura.Text, 
                                    ImageFormat.Wmf);
                            }
                        }
                        else
                        {
                            MessageBox.Show("La carpeta de destino de la imagen " +
                                "capturada debe existir.", "Atención",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            bSelDestino.Focus();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Debe indicar una carpeta y nombre de fichero " +
                            "para guardar la imagen capturada.", "Atención",
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        bSelDestino.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar el formato para la imagen. ", 
                        "Atención",
                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    lsFormatoImagen.Focus();
                }
            }
            else
            {
                MessageBox.Show("Debe capturar previamente una imagen.", "Atención",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    btCapturarPantalla.Focus();
            }
        }

        private void linkAjpdSoft_LinkClicked(object sender, 
            LinkLabelLinkClickedEventArgs e)
        {
            //abrir navegador por defecto y acceder a la URL www.ajpdsoft.com
            System.Diagnostics.Process.Start("http://www.ajpdsoft.com");
        }

        private void lsFormatoImagen_SelectedValueChanged(object sender, 
            EventArgs e)
        {
            //si el usuario cambia el formato de la imagen destino
            //y ya hay algo escrito en txtUbicacionCaptura, 
            //cambiaremos la extensión del fichero por la 
            //seleccionada en el formato
            string ficheroCaptura = "";
            ficheroCaptura = txtUbicacionCaptura.Text;
            if (ficheroCaptura != "")
            {
                ficheroCaptura = System.IO.Path.GetDirectoryName(ficheroCaptura) + 
                    System.IO.Path.DirectorySeparatorChar + 
                    System.IO.Path.GetFileNameWithoutExtension(ficheroCaptura) + 
                    "." + lsFormatoImagen.Text.ToLower();
                txtUbicacionCaptura.Text = ficheroCaptura;
            }
        }
    }
}

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.

Artículo en inglés.


Anuncios


Enviado el Sábado, 30 junio a las 23:11:25 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A