Manejo de Imagenes con C#
-
Upload
alberto-moreno-cueva -
Category
Documents
-
view
114 -
download
5
description
Transcript of Manejo de Imagenes con C#
APLICACIÓN CON IMÁGENES CON C#
Vamos a crear una BDD propia con una tabla clientes tal como se muestra en elscript luego a través de un formulario se va a realizar la gestión correspondientede 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 mastercreate database Imagengouse Imagengocreate table ImagCliente(codigo char(5)primary key,nombre varchar(50),
foto image)select * from ImagClientedelete from ImagClientego------------------------------------------create proc img_MostrarClientesasselect * from ImagClientego------
create proc Imag_uspgenerarcodigo@codigo char(5) outputasSet @codigo=(select max(codigo) from ImagCliente )Set@codigo='C'+right('000'+ltrim(right(isnull(@codigo,'0000'),4)+1),4)godeclare @codigo char(5)exec Imag_uspgenerarcodigo @codigo outputprint @codigogo----------------------------------------create proc Imag_uspgrabarcliente@codigo char(5),@nombre varchar(50),@foto imageasinsert into ImagCliente values(@codigo,@nombre,@foto)go-------------------------------create proc Img_Buscarclientes@codigo char(5)asselect * from ImagCliente where codigo=@codigo
Paso 2: Codigo en un formulario en C#.
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;
using System.Data.SqlClient;using System.IO;//Libreria para controlar archivos de Entrada/ Salidanamespace GuardandoImagenes{
public partial class Form1 : Form{
public Form1(){
InitializeComponent();}
SqlConnection cn = newSqlConnection("Server=(local);IntegratedSecurity=SSPI;Database=Imagen");private long m_lImagenFileLength=0; //Logitud delarchivo de//la imagenbyte[] m_barrImg;
void cargaimagen(){//OpenFileDialog -->Permite al usuario abrir un archivoOpenFileDialog open1 = new OpenFileDialog();
//Asignando el tipo de archivo a leer//OpenFileDialog1.Filter="txt files(*.txt)|*.txt|All//files(*.*)|*.*";open1.Filter = "ImagenFiles(*.BMP,*.JPG,*.GIP)|*.BMP,*.JPG,*.GIP|Allfiles(*.*)|*.*";
open1.FilterIndex = 2;open1.RestoreDirectory = true;open1.ShowDialog();//Abriendo la cja de dialogo
//para selecionar un archivo//Preguntando si ha selecionado o no un archivoif(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 imagenFileInfo fiImage = new FileInfo(strfoto);
//obteniendo la logitud de la imagenthis.m_lImagenFileLength = fiImage.Length;
//FileStream ==> Expone un objeto Stream alrededor de u//archivo// se admiten operaciones de lectura y escritura sincronica
//y asincronicaFileStream 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 modo 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 bytes 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 lasecuencia
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 = newSqlDataAdapter("img_MostrarClientes", cn);
DataTable tb1 = new DataTable();da.Fill(tb1);dataGridView1.DataSource = tb1;
dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);
}void MostrarcodigoGenerado(){
SqlCommand cmd = newSqlCommand("Imag_uspgenerarcodigo",cn);
cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Add("@codigo", SqlDbType.Char,
5).Direction = ParameterDirection.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 = newSqlCommand("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, EventArgse)
{Limpia();
}void Limpia(){
txtcod.Text = "";txtnom.Text = "";txtcod.Enabled = false;pictureBox1.Image = null;txtnom.Focus();mostrarclientes();MostrarcodigoGenerado();
}
private void btnSalir_Click(object sender, EventArgse)
{if(MessageBox.Show("Desea
Salir","Imagenes",MessageBoxButtons.YesNo,MessageBoxIcon.Information)==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 codigotxtnom.Text = dr[1].ToString();// campo nombrebyte[] barrImg = (byte[])dr[2];// campo fotostring strfn =
Convert.ToString(DateTime.Now.ToFileTime());//FileStream(IntPtr,FileMode,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 laspropiedades CanRead y CamWrite
// del objeto//FileAccess ==> constante del FileAccess
que determina como el objtero FileStream puede obtener acceso// al archivo//Obtiene las propiedades CanRead y
CanWrite del objeto FileStream. CanSeek es TRUE si path//especifica un archivo de discoFileStream 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 subyacentefs.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:
Como tarea para que mida su capacidad y competencia realizarse el siguienteejercicio: empleando la BDD Neptuno
Susy Díaz Bustamante
Fernando Lértora Liñán