Captura Imagen C#

  • August 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Captura Imagen C# as PDF for free.

More details

  • Words: 1,355
  • Pages: 9
http://foros.solocodigo.com/index.php?showtopic=30381 public class WebCam

{

// Conserva esta cabecera // Empeorxdevil 2007 class SaveImage { // Conserva esta cabecera // Emperorxdevil 2007

Asociado

/// <summary> /// Imagen que contiene la clase /// public Image Tmp; // referencia a la imagen del Picturebox Form Ref; // referencia que necesitare a este formulario

di�logo

Form Opciones; GroupBox Gr; RadioButton R1; RadioButton R2; RadioButton R3; TextBox Porciento; TextBox Larg;

// Objetos necesarios para formar el

TextBox Anch; Label L1; Label L2; Button Acepta; Button Cancelar; SaveFileDialog Sv; DialogResult rs; /// <summary> /// Constructor de clase SaveImage /// /// <param name="imagen">Imagen que se va a guardar /// <param name="Interfaz"> Si se mostrar� Interfaz public SaveImage(Image imagen, bool Interfaz) { Tmp=imagen; // Asigno la imagen... Opciones= new Form(); Ref=Opciones; Opciones.Width=333; // Configuracion Opciones.Height=198; Opciones.Text="Par�metros de Imagen"; Opciones.ControlBox=false; Opciones.ShowInTaskbar=false; Opciones.FormBorderStyle=FormBorderStyle.FixedDialog; Gr= new GroupBox(); Gr.Width=288; Gr.Height=105; Gr.Text="Configuraci�n";

Gr.Location= new Point(18,15); Porciento= new TextBox(); Porciento.Enabled=false; Configuracion

//

Porciento.Text=""; Porciento.Width=37; Porciento.Height=20; Porciento.MaxLength=3; Porciento.TextAlign=HorizontalAlignment.Center; Porciento.Location= new Point(147,47); R1= new RadioButton(); R1.Text="Guardar con Dimensiones Actuales"; R1.Width=191; R1.Height=17; Gr.Controls.Add(R1); R1.Location= new Point(18,25);

R2 = new RadioButton(); R2.CheckedChanged += new EventHandler(R2_CheckedChanged); R2.Text="Reducir tama�o al"; R2.Width = 115; // Configuracion R2.Height = 17; R2.Location= new Point(18,48); Gr.Controls.Add(R2); Gr.Controls.Add(Porciento); L1 = new Label(); L1.Text="%"; L1.AutoSize=true; L1.Location= new Point(195,50); Gr.Controls.Add(L1); R3 = new RadioButton(); R3.CheckedChanged += new EventHandler(R3_CheckedChanged); R3.Text="Cambiar tama�o a"; // Configuracion R3.Width=113; R3.Height=17; R3.Location= new Point(18,71); Gr.Controls.Add(R3); L2 = new Label(); L2.Text="X"; L2.AutoSize=true; L2.Location=new Point(195,75); Gr.Controls.Add(L2); Larg= new TextBox(); Larg.Enabled=false; Larg.Width=37; Larg.Height=20; Larg.MaxLength=4; Larg.TextAlign=HorizontalAlignment.Center; Larg.Location= new Point(147,71); Gr.Controls.Add(Larg); Anch= new TextBox(); Anch.Enabled=false; Anch.Width=37; Anch.Height=20; Anch.MaxLength=4;

Anch.TextAlign=HorizontalAlignment.Center; // Configuracion Anch.Location= new Point(218,70); Gr.Controls.Add(Anch); Acepta= new Button(); Acepta.Text="Aceptar"; Acepta.Width=59; Acepta.Height=26; Acepta.Location= new Point(247,133); Acepta.Click += new EventHandler(Acepta_Click); Cancelar= new Button(); Cancelar.Text="Cancelar"; Cancelar.Width= 59; Cancelar.Height=26; Cancelar.Location= new Point(18,133); Cancelar.Click += new EventHandler(Cancelar_Click); Opciones.Controls.Add(Gr); Opciones.Controls.Add(Acepta); Opciones.Controls.Add(Cancelar); Opciones.StartPosition=FormStartPosition.CenterScre en;

Opciones.ShowDialog(); } /// <summary> /// Constructor de la clase SaveImage sin Interfaz /// /// <param name="imagen">Imagen a Guardar public SaveImage(Image imagen) { Tmp = imagen; // Asigno la imagen... } void R3_CheckedChanged(object sender, EventArgs e)

{

if (this.R3.Checked) { this.Anch.Enabled=true; this.Larg.Enabled=true;} else {this.Anch.Enabled=false; this.Larg.Enabled=false; } } void R2_CheckedChanged(object sender, EventArgs e) { if (this.R2.Checked) { this.Porciento.Enabled=true;} else { this.Porciento.Enabled=false; } } void Acepta_Click(object sender, EventArgs e) { try { if (R1.Checked|| R2.Checked||R3.Checked) { if (R2.Checked) {Tmp=Resize(Tmp,Convert.ToInt32(Porciento.Text));} if (R3.Checked) {Tmp=Resize(Tmp,Convert.ToInt32(Larg.Text),Convert.ToInt32(Anch.Text)); }

Sv= new SaveFileDialog(); // Creo un di�logo

para salvar la imagen

Sv.Title = "Guardar imagen como..."; // Lo

configuro

Sv.Filter = "Archivo JPG|*.jpg|Archivo PNG| *.png|Archivo GIF|*.gif|Mapa de Bits|*.bmp"; rs = Sv.ShowDialog(); // Lo muestro modal if (rs == DialogResult.OK) { int x = Sv.FilterIndex; // Ontengo la

extensi�n seleccionada

switch (x) { // Salvo la imagen en el formato deseado case 1: Tmp.Save(Sv.FileName, ImageFormat.Jpeg);

break; case 2: Tmp.Save(Sv.FileName,

ImageFormat.Png);

break; case 3: Tmp.Save(Sv.FileName,

ImageFormat.Gif);

break; case 4: Tmp.Save(Sv.FileName,

ImageFormat.Bmp);

break; }

Ref.Dispose(); // Cierro el formulario

} } else { MessageBox.Show("Al menos debe selecionar una opci�n","xdevilWebCapture", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch { MessageBox.Show("Introduzca valores v�lidos", "xdevilWebCapture", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } void Cancelar_Click(object sender, EventArgs e) { Ref.Dispose(); // Cierro el formulario }

/// <summary> /// Escala la imagen capturada al % especificado

/// /// <param name="foto"> Imagen que se quiere escalar /// <param name="TantoPorCiento"> Porcentaje de reducci�n /// Imagen escalada public Image Resize(Image foto,int TantoPorCiento) { float Tporciento=((float)TantoPorCiento/100); // Obtengo el coeficiente de dimension int ImgOrAncho=foto.Width; int ImgOrAlto=foto.Height; // Obtengo las dimensiones originales de la foto int OrigX=0; int OrigY=0; int ResX=0; // Variables referencia para saber donde empiezo a contar px

int ResY=0;

int ResAncho=(int)(ImgOrAncho*Tporciento); int ResAlto = (int)(ImgOrAlto * Tporciento); // Obtengo las dimensiones al % especificado Bitmap RszIm= new Bitmap(ResAncho,ResAlto,PixelFormat.Format24bppRgb); // Creo una imagen con esas dimensiones y bpp RszIm.SetResolution(foto.HorizontalResolution,foto.VerticalRe solution); // Le doy la misma res. que la original Graphics Gfoto= Graphics.FromImage(RszIm); // Creo una intancia de Graphics para manejar la imagen nueva Gfoto.InterpolationMode= InterpolationMode.HighQualityBicubic; // Especifico la calidad del algoritmo de sampleo // De la foto original, obtengo la redimensionada (mediante un rect�ngulo) Gfoto.DrawImage(foto,new Rectangle(ResX,ResY,ResAncho,ResAlto),new Rectangle(OrigX,OrigY,ImgOrAncho,ImgOrAlto),GraphicsUnit.Pixel); Gfoto.Dispose(); // Ya no me hace falta esto, asi que lo descargo return(RszIm); // Devuelvo la imagen redimensionada } /// <summary> /// Redimensiona la imagen en pixeles /// /// <param name="foto"> Imagen a redimensionar /// <param name="ancho">Ancho de la imagen /// <param name="alto">Alto de la imagen /// Imagen redimensionada public Image Resize(Image foto, int ancho, int alto) {

dimensiones de la foto

int ImgORAncho = foto.Width; int ImgOrAlto = foto.Height; // Obtengo las int OrigX = 0; int OrigY = 0;

int ResX = 0; contar px

// Varables referencia para saber donde

int ResY = 0; float Porciento = 0; float PorcientoAncho = 0; // Porcentajes de sampleo float PorcientoAlto = 0;

PorcientoAncho = ((float)ancho / (float)ImgORAncho); PorcientoAlto = ((float)alto / (float)ImgOrAlto); //Calculo el % que puedo resamplear if (PorcientoAlto < PorcientoAncho){ Porciento = PorcientoAlto; } else { // Para resamplear bien Porciento = PorcientoAncho; } int AnchuraFinal = (int)(ImgORAncho * Porciento); int AlturaFinal; // Calculo las nuevas dimensiones if (ancho >alto) { AlturaFinal = (int)(ImgOrAlto

Porciento); }

*

else { AlturaFinal =AnchuraFinal;} // Para proporcionar la imagen Bitmap RszIm = new Bitmap(ancho, alto,PixelFormat.Format24bppRgb); RszIm.SetResolution(foto.HorizontalResolution,foto.VerticalReso lution); Graphics Gfoto = Graphics.FromImage(RszIm); Gfoto.InterpolationMode =InterpolationMode.HighQualityBicubic; Gfoto.DrawImage(foto,new Rectangle(ResX, ResY, AnchuraFinal, AlturaFinal),new Rectangle(OrigX, OrigY, ImgORAncho , ImgOrAlto),GraphicsUnit.Pixel); Gfoto.Dispose(); return (RszIm); } } /// Clase que guarda las im�genes #region Funciones API

lParam);

[DllImport("user32.dll", EntryPoint = "SendMessage")] public static extern int SendMessage(int hWnd, uint Msg, int wParam, int

[DllImport("avicap32.dll", EntryPoint = "capCreateCaptureWindowA")] public static extern int capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID); [DllImport("user32.dll", EntryPoint = "EmptyClipboard")] public static extern int EmptyClipboard();

[DllImport ("avicap32.dll",EntryPoint="capGetDriverDescriptionA")] public static extern bool capGetDriverDescriptionA(int wdriver,string lpszName,int cbName,string lpszVer,int cbVer); #endregion #region Constantes API const const const const const const const const

int int int int int int int int

WM_USER = 1024; WM_CAP_CONNECT = 1034; WM_CAP_DISCONNECT = 1035; WM_CAP_GET_FRAME = 1084; // Constantes necesarias WM_CAP_COPY = 1054; WM_CAP_START = WM_USER; WM_CAP_SET_PREVIEW = WM_CAP_START + 50; WM_CAP_SET_PREVIEWRATE = WM_USER + 52;

#endregion private int Frecuencia=0; // Frecuencia de captura de imagen private int CamHandle=0; // Handle del dispositivo Timer reloj; // Timer ComboBox Cbx; // Para referencia al Combobox PictureBox Pbx; // Para referencia al Picturebox /// <summary> /// Crea una instancia de la clase WebCam de Emperorxdevil /// /// <param name="frecuencia">Intervalo de tiempo en el que se capturar�n las im�genes /// <param name="pct">PictureBox en el cual se mostrar� lo capturado por la webcam /// <param name="cb"> Listbox en el que se mostrar�n las Cams detectadas public WebCam(int frecuencia,PictureBox pct, ComboBox cb) { Frecuencia=frecuencia; Pbx=pct; // Inicio las variables necesarias reloj= new Timer(); // Creo el timer reloj.Tick += new EventHandler(reloj_Tick); // Le asigno el controlador reloj.Interval=Frecuencia; // Asigno la velocidad de captura Cbx= cb; //Configuro la referencia } private void reloj_Tick(object sender, EventArgs e) { SendMessage(CamHandle, WM_CAP_GET_FRAME,0,0); // Capturo la imagen SendMessage(CamHandle, WM_CAP_COPY, 0, 0); // La copio al portapeles Pbx.Image=Clipboard.GetImage(); // La mando al Picturebox EmptyClipboard(); // Vac�o el portapapeles

} /// <summary> /// Listar� las c�maras web encontradas en el Combobox asociado /// public void Listar() { bool valor; string nombre; string version; int x=0; do { nombre="Dispositivo"+x.ToString(); valor=capGetDriverDescriptionA(x,nombre,100,"v1",100); if (valor) Cbx.Items.Add(nombre); x=x+1; } while (!valor==false); } /// <summary> /// La WebCam se Encender� y mostrar� lo capturado en el PictureBox referenciado /// /// <param name="Dispositivo">N� de dispositivo del Combobox public void Capturar(int Dispositivo) { try { StopCaptura(); // Antes de nada "reseteo" el dispositivo

CamHandle= capCreateCaptureWindowA("XdevilCapture"+Dispositivo.ToString(),0,0,0,0,0,Pbx.Handl e.ToInt32(),Dispositivo); // Obtengo el Handle de la cam SendMessage(CamHandle, WM_CAP_CONNECT, 0, 0); // Enciendo la cam SendMessage(CamHandle,WM_CAP_SET_PREVIEWRATE,30,0); // Establezco los frames de captura /seg SendMessage(CamHandle, WM_CAP_SET_PREVIEW,0,0); // Empiezo a capturar reloj.Start(); // Inicio la captura }

WebCam","Error");

catch (Exception e) { MessageBox.Show("No se puede Iniciar la }

} /// <summary> /// Detiene la captura de im�genes y apaga la WebCam /// public void StopCaptura() { try { reloj.Stop(); // Paro el reloj que captura

SendMessage(CamHandle, WM_CAP_DISCONNECT, 0, 0); // Apago la cam }

EmptyClipboard(); // Vac�o el portapapeles

catch (Exception e) { } // No hago nada.. pa k ?

guardar

} /// <summary> /// Muestra diferentes parametros configurables de la imagen que se va a /// public void GuardarImagen() {

SaveImage s= new SaveImage(Pbx.Image,true); // Creo la clase que guarda las fotos } }

Related Documents

Captura Imagen C#
August 2019 19
Imagen
October 2019 66
Imagen
May 2020 32
Captura Fip.docx
May 2020 3
Captura Fip.docx
May 2020 6
Imagen
April 2020 46