Analisisdeun sistema personal

Solo disponible en BuenasTareas
  • Páginas : 5 (1024 palabras )
  • Descarga(s) : 0
  • Publicado : 27 de noviembre de 2009
Leer documento completo
Vista previa del texto
Introducción:
En este artículo te voy a explicar (de la forma más sencilla posible) cómo trabajar con imágenes para guardarlas en una base de datos de SQL Server 2005.
Por supuesto también te explicaré cómo recuperar una imagen de la base de datos y mostrarla en un control de tipo PictureBox.
Para este ejemplo, voy a usar una clase muy simple en la que tengo definido dos métodos compartidos(o estáticos), uno de ellos te permitirá convertir una imagen en un array de tipo Byte (¡espera! ¡no te desesperes! ahora te explico porqué convertir una imagen a un array de bytes), y la otra para lo contrario, es decir, convertir un array de bytes en un objeto de tipo Image.
Lo de trabajar con un array de bytes es porque en realidad un campo de tipo image de SQL Server es un array de bytes.Sabiendo esto, puedes adivinar que el primer método servirá para poder guardar una imagen en el campo de la tabla y el segundo para leer el contenido de ese campo y poder usarlo como una imagen normal.
Aquí tienes el código de esos dos métodos, tanto para Visual Basic como para C#. Estos dos métodos están definidos en una clase llamada TablaNavegar y como ves son estáticos (compartidos), portanto para usarlos no es necesario crear una instancia de esa clase, sino que se usarán indicando el nombre de la clase seguida del método a usar (en un momento te explico cómo usarlos).

Public Shared Function Image2Bytes(ByVal img As Image) As Byte()

Dim sTemp As String = Path.GetTempFileName()

Dim fs As New FileStream(sTemp, FileMode.OpenOrCreate, FileAccess.ReadWrite)img.Save(fs, System.Drawing.Imaging.ImageFormat.Png)

fs.Position = 0

'

Dim imgLength As Integer = CInt(fs.Length)

Dim bytes(0 To imgLength - 1) As Byte

fs.Read(bytes, 0, imgLength)

fs.Close()

Return bytes

End Function

Public Shared Function Bytes2Image(ByVal bytes() As Byte) As Image

If bytes Is Nothing Then Return Nothing'

Dim ms As New MemoryStream(bytes)

Dim bm As Bitmap = Nothing

Try

bm = New Bitmap(ms)

Catch ex As Exception

System.Diagnostics.Debug.WriteLine(ex.Message)

End Try

Return bm

End Function

 

public static byte[] Image2Bytes(Image img)

{

string sTemp = Path.GetTempFileName();

FileStream fs = newFileStream(sTemp, FileMode.OpenOrCreate, FileAccess.ReadWrite);

img.Save(fs, System.Drawing.Imaging.ImageFormat.Png);

fs.Position = 0;

//

int imgLength = Convert.ToInt32(fs.Length);

byte[] bytes = new byte[imgLength];

fs.Read(bytes, 0, imgLength);

fs.Close();

return bytes;

}

public static Image Bytes2Image(byte[] bytes)

{if (bytes == null) return null;

//

MemoryStream ms = new MemoryStream(bytes);

Bitmap bm = null;

try

{

bm = new Bitmap(ms);

}

catch (Exception ex)

{

System.Diagnostics.Debug.WriteLine(ex.Message);

}

return bm;

}

El método Image2Bytes recibe como parámetro un objeto de tipo Image,crea un fichero temporal y lo guarda como PNG, lee el contenido de ese fichero y lo asigna a un array de tipo Byte, para finalmente devolver dicho array.
Por otro lado, el método Byte2Image recibe un array de bytes como parámetro, lo asigna a un objeto del tipo MemoryStream y ese "stream" lo utiliza para crear un objeto del tipo Bitmap, finalmente devuelve ese objeto que en el fondo es unobjeto de tipo Image.
Como puedes comprobar la parte más simple es la de convertir el array de bytes en una imagen, operación que puedes realizar en una sola pasada, al menos si no haces ningún tipo de comprobación de error.
 
Veamos ahora cómo usar estos métodos.
El primer caso, será para asignar a un campo de tipo image de una tabla de SQL Server el contenido de un control PictureBox. En el...
tracking img