miércoles, 9 de septiembre de 2009

Deserializar imagen de Base64 y desplegarla

Recientemente publiqué una sencilla entrada en donde explicaba cómo guardar imágenes en un campo BLOB/VARBINARY(MAX) y luego cómo leer la imagen.
Aquí :
Guardar Imagen en BLOB/VARBINARY(MAX)

Resulta que la idea principal de esto era leer dicha imagen del campo VARBINARY(MAX), serializarlo a Base64 y exponerlo en un método de un Web Service. Hasta ahí llegaba la funcionalidad de lo que estabamos haciendo. Sin embargo la parte que iba consumir el Web Service nos preguntó cómo hacerle para deserializar dicho string y mostrar la imagen en pantalla sin pasar por guardar los bytes en un archivo y abrirlo con un Image.

Parece bastante obvio y seguramente para muchos lo será pero no está demás exponer lo siguiente:

C#

1:        // Convertimos el string codificado en base64 a bytes  
2:        byte[] bytFoto = Convert.FromBase64String(strFoto);         
3:    
4:        // Y creamos un stream en memoria que accedera los bytes  
5:        MemoryStream msFoto = new MemoryStream(bytFoto, 0, bytFoto.Length);  
6:    
7:        // De esta manera podemos crear una imagen a partir de los bytes  
8:        Image imgFoto = Image.FromStream(msFoto);  
9:    
10:        // Y desplegarla en la pantalla en hipotético picturebox   
11:        pictureBox1.Image = imgFoto;  
12:    
13:        // o grabarla en disco con:  
14:        //imgFoto.Save("C:\temp\foto_ws.jpg", ImageFormat.Jpeg);  
15:    
16:        msFoto.Close();  
17:    


Sencillo tal vez, pero se me hizo interesante hacerlo y quise exponerlo aquí.

martes, 8 de septiembre de 2009

Guardar Imágen/BLOB en SQL Server

Recientemente tuve la necesidad de insertar imágenes en un campo VARBINARY(MAX) de SQL Server 2008.

No me interesaba tanto la funcionalidad de realizar la insercción desde mi pequeño proyectito de C#, me quería enfocar a leer dicho dato para luego serializarlo y exponerlo en un Web Service.

Esto fue lo que me encontré por ahi:

T-SQL
1:  CREATE TABLE MiTabla   
2:    (id int, image varbinary(max))  
3:  INSERT INTO MiTabla  
4:    SELECT   1 as id  
5:      ,(SELECT * FROM OPENROWSET(  
6:        BULK 'C:\popita.jpg', SINGLE_BLOB) as image )  

Recordar, estamos guardando la imagen como bytes no un objeto Image ó Bitmap.

Para leer este desde C# es bastante sencillo:
(Ustedes hagan todo su rollo de la conección a la base de datos...pondré solo lo sustancial...)

C#
1:  SqlDataReader rdrGetData=(new SqlCommand("SELECT * FROM MiTabla WHERE id=1",miSQLConn)).ExecuteReader();  
2:  if(rdrGetData.HasRows)  
3:  {  
4:    rdrGetData.Read();  
5:    if (!rdrGetData.IsDBNull(1))  
6:    {  
7:      SqlBytes bytes = rdrGetData.GetSqlBytes(1);  
8:      FileStream fs = new FileStream("g:\\popis.jpg", FileMode.OpenOrCreate, FileAccess.Write);  
9:      byte[] byteImage = new byte[bytes.Length];  
10:     int readedBytes=bytes.Stream.Read(byteImage, 0, Convert.ToInt32(bytes.Length));  
11:     fs.Write(byteImage, 0, byteImage.Length);                 
12:     fs.Close();                        
13:  }  

No olviden cerrar el DataReader

lunes, 7 de septiembre de 2009

IT Cartoons

Me encontré por ahi estos "cartoons" que me causaron mucha gracia.
Los comparto para sacarles al menos una sonrisa:

Uno de apuntadores:





Uno de programadores:



 
Este está genial:
 
 
 
Este me recuerda a alguien:
 
 

 
Me los encontré en StackOverflow excelente sitio....pasen por ahi de vez en cuando....