Imagenes en formularios windows

17/11/2005 - 11:44 por Vyacheslav Popov | Informe spam
Hola a todos

Estoy intentando enlazar el cuadro de imagen con un campo de la base de
datos. ¿Que hago mal?

Este es el codigo que tengo para enlazarlo

******************************************************

Binding bindFoto = new Binding("Image", MidataSet, "cliente.foto");
bindFoto.Format += new ConvertEventHandler(bindFoto_Format);
bindFoto.Parse += new ConvertEventHandler(bindFoto_Parse);
this.foto.DataBindings.Add(bindFoto);

******************************************************
private void bindFoto_Format(object sender, ConvertEventArgs e)
{
try
{
Byte[] img = (Byte[]) e.Value;

MemoryStream ms = new MemoryStream();

ms.Write(img, 0, img.Length);
Bitmap bmp = new Bitmap(ms);
ms.Close();

e.Value = bmp;
}
catch(Exception)
{
}
}

******************************************************
private void bindFoto_Parse(object sender, ConvertEventArgs e)
{
try
{
MemoryStream ms = new MemoryStream();
this.foto.Image.Save(ms, ImageFormat.Jpeg);


byte[] buffer = new byte[ms.Length];
stream.Position = 0;
stream.Read(buffer, 0, ms.Length);

e.Value = buffer;
}
catch(Exception)
{
}
}

******************************************************

Me da el siguiente error: No se puede dar formato del tipo deseado al valor.

Saludos
Popov

Preguntas similare

Leer las respuestas

#1 Marino Posadas
24/11/2005 - 20:50 | Informe spam
Hola

¿Por casualidad esas imágenes no vendrán de Access o de otra aplicación tipo
Office? Por que si es así, tienes que evitar escribir lo 78 primeros bytes
de cabecera que corresponden al prefijo OLE que estos programas incrustan a
los gráficos. Bastaría con que pusieses lo siguiente en el evento Format:

ms.Write(img, 78, img.Length-78);

Espero que te sirva.


Saludos cordiales
Marino Posadas
MVP Visual C#

www.ElAveFenix.net

"Vyacheslav Popov" escribió en el mensaje
news:
Hola a todos

Estoy intentando enlazar el cuadro de imagen con un campo de la base de
datos. ¿Que hago mal?

Este es el codigo que tengo para enlazarlo

******************************************************

Binding bindFoto = new Binding("Image", MidataSet, "cliente.foto");
bindFoto.Format += new ConvertEventHandler(bindFoto_Format);
bindFoto.Parse += new ConvertEventHandler(bindFoto_Parse);
this.foto.DataBindings.Add(bindFoto);

******************************************************
private void bindFoto_Format(object sender, ConvertEventArgs e)
{
try
{
Byte[] img = (Byte[]) e.Value;

MemoryStream ms = new MemoryStream();

ms.Write(img, 0, img.Length);
Bitmap bmp = new Bitmap(ms);
ms.Close();

e.Value = bmp;
}
catch(Exception)
{
}
}

******************************************************
private void bindFoto_Parse(object sender, ConvertEventArgs e)
{
try
{
MemoryStream ms = new MemoryStream();
this.foto.Image.Save(ms, ImageFormat.Jpeg);


byte[] buffer = new byte[ms.Length];
stream.Position = 0;
stream.Read(buffer, 0, ms.Length);

e.Value = buffer;
}
catch(Exception)
{
}
}

******************************************************

Me da el siguiente error: No se puede dar formato del tipo deseado al
valor.

Saludos
Popov

Respuesta Responder a este mensaje
#2 Vyacheslav Popov
25/11/2005 - 11:49 | Informe spam
Gracias por responder Marino

Ya lo tengo solucionado, el problema no estaba allí ;) sino en el
almacenamiento.
Para ser exacto, en el SalDataAdapter.
He modificado la secuencia SQL de inserción de tal modo que no me devolvía
todo una fila después de inserción sino solo la clave primaria con la
función SCOPE_IDENTITY() y en modificador le he puesto que me devuelva solo
el primer resultado.

Así que al final he tenido que restablecer las secuencias que se generan
automáticamente al configurar adaptador de datos y dejarlo sin
modificaciones y funcionó hasta ayer.

No se que ha pasado pero ha dejado de disparar el método PARSE.
Al final lo he tenido que programar manualmente y llamar a una función
parecida desde el método Validated de mi formulario.

Saludos.
Popov


"Marino Posadas" escribió en el mensaje
news:
Hola

¿Por casualidad esas imágenes no vendrán de Access o de otra aplicación
tipo Office? Por que si es así, tienes que evitar escribir lo 78 primeros
bytes de cabecera que corresponden al prefijo OLE que estos programas
incrustan a los gráficos. Bastaría con que pusieses lo siguiente en el
evento Format:

ms.Write(img, 78, img.Length-78);

Espero que te sirva.


Saludos cordiales
Marino Posadas
MVP Visual C#

www.ElAveFenix.net

"Vyacheslav Popov" escribió en el mensaje
news:
Hola a todos

Estoy intentando enlazar el cuadro de imagen con un campo de la base de
datos. ¿Que hago mal?

Este es el codigo que tengo para enlazarlo

******************************************************

Binding bindFoto = new Binding("Image", MidataSet, "cliente.foto");
bindFoto.Format += new ConvertEventHandler(bindFoto_Format);
bindFoto.Parse += new ConvertEventHandler(bindFoto_Parse);
this.foto.DataBindings.Add(bindFoto);

******************************************************
private void bindFoto_Format(object sender, ConvertEventArgs e)
{
try
{
Byte[] img = (Byte[]) e.Value;

MemoryStream ms = new MemoryStream();

ms.Write(img, 0, img.Length);
Bitmap bmp = new Bitmap(ms);
ms.Close();

e.Value = bmp;
}
catch(Exception)
{
}
}

******************************************************
private void bindFoto_Parse(object sender, ConvertEventArgs e)
{
try
{
MemoryStream ms = new MemoryStream();
this.foto.Image.Save(ms, ImageFormat.Jpeg);


byte[] buffer = new byte[ms.Length];
stream.Position = 0;
stream.Read(buffer, 0, ms.Length);

e.Value = buffer;
}
catch(Exception)
{
}
}

******************************************************

Me da el siguiente error: No se puede dar formato del tipo deseado al
valor.

Saludos
Popov





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida