Manejo de Imagenes con C#

Cargando y leeyendo imagenes desde una tabla en C#, se hace de cuadros de dialogo para buscar las imagenes de un directo

Views 213 Downloads 16 File size 396KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

APLICACIÓN CON IMÁGENES CON C# Vamos a crear una BDD propia con una tabla clientes tal como se muestra en el script luego a través de un formulario se va a realizar la gestión correspondiente de grabar y leer imágenes de la tabla :

El código de cliente se genera. Primer paso vamos a elaborar los procedimientos almacenados en sql 2005 use master create database Imagen go use Imagen go create table ImagCliente( codigo char(5)primary key, nombre varchar(50),

foto image ) select * from ImagCliente delete from ImagCliente go -----------------------------------------create proc img_MostrarClientes as select * from ImagCliente go -----create proc Imag_uspgenerarcodigo @codigo char(5) output as Set @codigo=(select max(codigo) from ImagCliente ) Set @codigo='C'+right('000'+ltrim(right(isnull(@codigo,'0000'),4) +1),4) go declare @codigo char(5) exec Imag_uspgenerarcodigo @codigo output print @codigo go ----------------------------- ----------create proc Imag_uspgrabarcliente @codigo char(5),@nombre varchar(50),@foto image as insert into ImagCliente values(@codigo,@nombre,@foto) go ------------------------------create proc Img_Buscarclientes @codigo char(5) as select * from ImagCl iente where codigo=@codigo Paso 2: Codigo en un formulario en C#. using using using using using using using

System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;

using System.Data.SqlClient; using System.IO;//Libreria para controlar archivos de Entrada / Salida namespace GuardandoImagenes { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SqlConnection cn = new SqlConnection("Server= (local);Integrated Security=SSPI;Database=Imagen"); private long m_lImagenFileLength=0; //Logitud delarchivo de //la imagen byte[] m_barrImg; void cargaimagen() { //OpenFileDialog -->Permite al usuario abrir un archivo OpenFileDialog open1 = new OpenFileDialog(); //Asignando el tipo de archivo a leer //OpenFileDialog1.Filter="txt files(*.txt)|*.txt|All //files(*.*)|*.*"; open1.Filter = "Imagen Files(*.BMP,*.JPG,*.GIP)|*.BMP,*.JPG,*.GIP|All files(*.*)|*.*"; open1.FilterIndex = 2; open1.RestoreDirectory = true; open1.ShowDialog();//Abriendo la cja de dialogo //para selecionar un archivo //Preguntando si ha selecionado o no un archivo if(string.IsNullOrEmpty(open1.FileName)) { MessageBox.Show("Selecione un Imagen"); return;//Saliendo del procedimiento } string strfoto = open1.FileName; //Especificando la posicion de la imagen pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; //muestra la imagen desde una archivo especificado pictureBox1.Image = Image.FromFile(strfoto); //Propotciona un metodo de instancia para la //creacion,eliminacion , mover la imagen FileInfo fiImage = new FileInfo(strfoto);

//obteniendo la logitud de la imagen this.m_lImagenFileLength = fiImage.Length; //FileStream ==> Expone un objeto Stream alrededor de u //archivo // se admiten operaciones de lectura y escritura sincronica //y asincronica FileStream fs = new FileStream(strfoto, FileMode.Ope n, FileAccess.Read, FileShare.Read); //FileStream(string,FileMode,FileAccess,FileShare) //Inicializa una nueva instancia de la clase fileStream con //el permiso de uso compartido, el permiso de //lectura/escritura, el mod o de creacion y la //ruta de aceso especifico //---------------------------------------------------------------------m_barrImg = new byte[Convert.ToInt32(this.m_lImagenFileLength)];// ----//---------------------------------------------------------------------//Read=> Lee un bloque de bytes de la secuencia y escribe los datos en un bufer dado //------------------------------------------------------------------------------//int iBystesRead = fs.Read(m_barrImg, 0, Convert.ToInt16(m_lImagenFileLength));// -//-----------------------------------------------------------------------------//--------try { int iBystesRead = fs.Read(m_barrImg, 0, Convert.ToInt16(m_lImagenFileLength));// -if (iBystesRead > 23552) { iBystesRead = 0; pictureBox1.Image = null; MessageBox.Show("La imagen debe de ser 160 x 120 pixeles"); return; } } catch (Exception ex) { string a = ex.Message; pictureBox1.Image = null;

MessageBox.Show("Imagen muy grande"); return; } //------------------------------------------------------------------------------//FileStream.Read(array,offset,count) //parametros //array //cuando devuelve el metdo ,contiene la matriz de bytes //(offset+count)) reemplazada por los bytes leidos desde el origen actual //offset //Desplazamiento de byte s en el parametro array deonde debe comenzar la lectura //count //Numero maximo de bytes que se pueden leer //valor devuelto //numero total de bytes leidos en el bufer .Puede ser menor que el numero de bytes solicitado si //ese numero decimal bytes no esta disponible actualmente o cero si se ha alcanzado else final de la secuencia fs.Close(); //Close()--> cierra la secuendia actual y libera tados recursos //(cimi sockets e identificardores de archivo) asociados a esta } private void Form1_Load(object sender, EventArgs e) { Limpia(); } void mostrarclientes() { SqlDataAdapter da = new SqlDataAdapter("img_MostrarClientes", cn); DataTable tb1 = new DataTable(); da.Fill(tb1); dataGridView1.DataSource = tb1; dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.All Cells); } void MostrarcodigoGenerado() {

SqlCommand cmd = new SqlCommand("Imag_uspgenerarcodigo",cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@codigo", SqlDbType.Char, 5).Direction = Para meterDirection.Output; cn.Open(); cmd.ExecuteNonQuery(); txtcod.Text = cmd.Parameters[0].Value.ToString(); cn.Close(); } private void btnBuscarImagen_Click(object sender, EventArgs e) { cargaimagen(); } private void btnGuardar_Click(object sender, EventArgs e) { try { SqlCommand cmd = new SqlCommand("Imag_uspgrabarcliente", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@codigo", System.Data.SqlDbType.Char, 5).Value = txtcod.Text; cmd.Parameters.Add("@nombre", System.Data.SqlDbType.Char, 50).Value = txtnom.Text; cmd.Parameters.Add("@foto", System.Data.SqlDbType.Image).Value = m_barrImg; cn.Open(); int iresult = cmd.ExecuteNonQuery(); if (iresult == 1) { mostrarclientes(); MessageBox.Show("Cliente Registrado"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { cn.Close(); }

Limpia(); } private void btnNuevo_Click(object sender, EventArgs e) { Limpia(); } void Limpia() { txtcod.Text = ""; txtnom.Text = ""; txtcod.Enabled = false; pictureBox1.Image = null; txtnom.Focus(); mostrarclientes(); MostrarcodigoGenerado(); } private void btnSalir_Click(object sender, EventArgs e) { if(MessageBox.Show("Desea Salir","Imagenes",MessageBoxButtons.YesNo,MessageBoxIcon.Info rmation)==DialogResult.Yes) { Application.Exit(); } } private void button6_Click(object sender, Even tArgs e) { try { if (string.IsNullOrEmpty(txtbuscar.Text)) { MessageBox.Show("Ingrese un codigo a buscar"); return; } SqlCommand cmd = new SqlCommand("Img_Buscarclientes", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@codigo", SqlDbType.Char, 5).Value = txtbuscar.Text.ToString(); cn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows == true) {

dr.Read(); txtcod.Text = dr[0].ToString();// campo codigo txtnom.Text = dr[1].ToString();// campo nombre byte[] barrImg = (byte[])dr[2];// campo foto string strfn = Convert.ToString(DateTime.Now.ToFileTime()); //FileStream(IntPtr,File Mode,FileAccess) //incializa una nueva instalcia de la clase FileStream con //el permiso de lectura/Escritura,el modo de creacion y la //ruta de acceso especificado IntPtr ==> un indicador de //archivo para el archivo que el objeto FileStream actual va //a escapsular //FileMode ==>una constrante de FileAccess que obtinee las propiedades CanRead y CamWrite // del o bjeto //FileAccess ==> constante del FileAccess que determina como el objtero FileStream puede obtener acceso // al archivo //Obtiene las propiedades CanRead y CanWrite del objeto Fi leStream. CanSeek es TRUE si path //especifica un archivo de disco FileStream fs = new FileStream(strfn, FileMode.CreateNew,FileAccess.Write); fs.Write(barrImg, 0, barrImg.Length); //Flush()=> borar todos los buferes de esta secuencia y hace que todos los datos almacenados // en el bufer se escriban en el dispositivo subyacente fs.Flush(); fs.Close(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.Image = Image.FromFile(strfn); } else { MessageBox.Show("No exite el registro"); txtcod.Clear(); txtnom.Clear(); pictureBox1.Image = null; } } catch (Exception ex) { MessageBox.Show(ex.Message); }

finally { cn.Close(); } }

} } Al final debe de obtenerse el siguiente resultado:

Susy Díaz Bustamante

Fernando Lértora Liñán

Como tarea para que mida su capacidad y competencia realizarse el siguiente ejercicio: empleando la BDD Neptuno