Imágenes & DataSet…

Estuve desarrollando un Caso de Uso que me propuso un reto, requiere escanear imágenes en la presentación y almacenarlas posteriormente en la Base de Datos. En esta entrada les muestro como trabajar con imagenes en cuanto a su transporte.

En .NET las clases de imagenes y su tratamiento se encuentran bajo el namespace System.Drawing. La clase Image encapsula una imágen.

En la base de datos, es necesario definir la columna de la imagen como del tipo “Image” (SQL-Server).

Para enviar las imágenes, trabajando con DataSet, es necesario definir la columna de la tabla que va a contener la imágen como byte[] (array de bytes).

¿Cómo obtener un byte[] a partir de un objeto Image? Les paso el código capaz de realizar la conversión:

public static System.Byte[] ConvertirAByte(Image img, System.Drawing.Imaging.ImageFormat formato) {
    byte[] imgByteReturn;
    using (MemoryStream ms = new MemoryStream()) {
        img.Save(ms, formato);
        imgByteReturn = ms.ToArray();
        ms.Close();
    }
    return imgByteReturn;
}

se crea un MemoryStream en el cual se va a guardar la imágen, después lo único que hacemos es convertir ese Stream a array.

Para cargar la imágen a partir de un byte[] usamos el siguiente código:

public static Image CargarImagen(System.Byte[] arrImagen) {
    Image imagen = null;
    using (MemoryStream memoryBits = new MemoryStream(arrImagen)) {
        imagen = Image.FromStream(memoryBits);
    }
    return imagen;
}

Con el byte[] que tenemos armamos un Stream y luego usamos el método FromStream de la clase Image para obtener a partir del Stream, una instancia de Image.

Las transformaciones son cosa sencilla… Espero que les sirva… en algún momento de sus vidas.

Anuncios
Publicado en C#. Etiquetas: , . 2 Comments »