leer imagenes en access desde c#

24/01/2006 - 00:47 por Javier | Informe spam
Tengo un problema, desde mi aplicacion deberia de poder cargar las imagenes
que hay en una base de datos en access, estas imagenes las han insertado
copiando y pegando directamente en access, en los componentes del formulario
de access que tenian, pero ahora queremos hacer una aplicacion y tenemos que
usar las mismas imagenes, pero he probado varios metodos para cargar esas
imagenes leyendolas como un array de bytes, luego pasando a MemoryStream, y
de alli un Image.FromStream... pero nada, me dice "Parametro no valido", y
he probado varios metodos que he encontrado por internet, pero no se que es
lo que estoy haciendo mal, o donde puede estar el problema, si alguien
pudiese ayudarme le estaria muy agradecido!!!

Gracias.

Preguntas similare

Leer las respuestas

#1 Marino Posadas
24/01/2006 - 02:57 | Informe spam
Hola Javier

Es que si las importas de Access añaden 78 bytes debido al soporte de OLE,
que deberás de eliminar:

Por ejemplo si tienes la imagen en un campo de un DataSet, su formato será
base64Binary, y por lo que puedes recuperarlo desde el evento Format de un
Binding que tengas a un PictureBox, por ejemplo, con el siguiente código:

// Formatea el valor enlazado para encajarlo en la propiedad

private void PictureBox_Format(object sender, ConvertEventArgs e)

{

//Convierte los bits de imagen en un objeto Bitmap que se puede

//asignar a un PictureBox : e.Value es el valor original

byte[] img= (byte[]) (e.Value);

//Conversión

MemoryStream ms= new MemoryStream();

int offset = 78;

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

Bitmap bmp = new Bitmap(ms);

ms.Close();


//Escribe el nuevo valor convertido

e.Value = bmp;

}

Espero que te sirva.


Saludos cordiales
Marino Posadas
MVP Visual C#

www.ElAveFenix.net


"Javier" escribió en el mensaje
news:%
Tengo un problema, desde mi aplicacion deberia de poder cargar las
imagenes que hay en una base de datos en access, estas imagenes las han
insertado copiando y pegando directamente en access, en los componentes
del formulario de access que tenian, pero ahora queremos hacer una
aplicacion y tenemos que usar las mismas imagenes, pero he probado varios
metodos para cargar esas imagenes leyendolas como un array de bytes, luego
pasando a MemoryStream, y de alli un Image.FromStream... pero nada, me
dice "Parametro no valido", y he probado varios metodos que he encontrado
por internet, pero no se que es lo que estoy haciendo mal, o donde puede
estar el problema, si alguien pudiese ayudarme le estaria muy
agradecido!!!

Gracias.


Respuesta Responder a este mensaje
#2 Javier
24/01/2006 - 20:22 | Informe spam
He probado eso y me da

Excepción no controlada del tipo 'System.ArgumentException' en
system.drawing.dll

el campo que estoy convirtiendo lo obtengo asi del DataRow
SITUACION = (byte[])r["SITUACION"];

y comprobado la variable SITUACION que es de tipo byte[] y tiene una
longitud de 246844, lo cual me dice que si lee algo, pero ahora no se que
estoy haciendo mal, la propiedad esta asi definida

private byte[] _SITUACION;

y el acceso lo hago asi

public byte[] SITUACION_{
get{
return (byte[])_SITUACION;
}
set{
_SITUACION = (byte[])value;
}

alguna idea de lo que estoy haciendo mal???

gracias!!!


Información adicional: Parámetro utilizado no válido.
"Marino Posadas" escribió en el mensaje
news:
Hola Javier

Es que si las importas de Access añaden 78 bytes debido al soporte de OLE,
que deberás de eliminar:

Por ejemplo si tienes la imagen en un campo de un DataSet, su formato será
base64Binary, y por lo que puedes recuperarlo desde el evento Format de un
Binding que tengas a un PictureBox, por ejemplo, con el siguiente código:

// Formatea el valor enlazado para encajarlo en la propiedad

private void PictureBox_Format(object sender, ConvertEventArgs e)

{

//Convierte los bits de imagen en un objeto Bitmap que se puede

//asignar a un PictureBox : e.Value es el valor original

byte[] img= (byte[]) (e.Value);

//Conversión

MemoryStream ms= new MemoryStream();

int offset = 78;

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

Bitmap bmp = new Bitmap(ms);

ms.Close();


//Escribe el nuevo valor convertido

e.Value = bmp;

}

Espero que te sirva.


Saludos cordiales
Marino Posadas
MVP Visual C#

www.ElAveFenix.net


"Javier" escribió en el mensaje
news:%
Tengo un problema, desde mi aplicacion deberia de poder cargar las
imagenes que hay en una base de datos en access, estas imagenes las han
insertado copiando y pegando directamente en access, en los componentes
del formulario de access que tenian, pero ahora queremos hacer una
aplicacion y tenemos que usar las mismas imagenes, pero he probado varios
metodos para cargar esas imagenes leyendolas como un array de bytes,
luego pasando a MemoryStream, y de alli un Image.FromStream... pero nada,
me dice "Parametro no valido", y he probado varios metodos que he
encontrado por internet, pero no se que es lo que estoy haciendo mal, o
donde puede estar el problema, si alguien pudiese ayudarme le estaria muy
agradecido!!!

Gracias.







Respuesta Responder a este mensaje
#3 Marino Posadas
25/01/2006 - 13:03 | Informe spam
Hola Javier

¿Quién da la ArgumentException? ¿El PictureBox? Si asignas la propiedad
Image de un PictureBox tienes que pasarle un objeto Image o cualquier
derivado de él (Bitmap, por ejemplo) Respecto a la propiedad _SITUACION no
veo nada que estés haciendo mal. El tema está en esos 78 bytes de cabecera
que tienes que eliminar antes de intentar crear el Bitmap, y que -en mi
ejemplo- se eliminan al escribir en el MemoryStream.

Saludos cordiales
Marino Posadas
MVP Visual C#

www.ElAveFenix.net



"Javier" escribió en el mensaje
news:%
He probado eso y me da

Excepción no controlada del tipo 'System.ArgumentException' en
system.drawing.dll

el campo que estoy convirtiendo lo obtengo asi del DataRow
SITUACION = (byte[])r["SITUACION"];

y comprobado la variable SITUACION que es de tipo byte[] y tiene una
longitud de 246844, lo cual me dice que si lee algo, pero ahora no se que
estoy haciendo mal, la propiedad esta asi definida

private byte[] _SITUACION;

y el acceso lo hago asi

public byte[] SITUACION_{
get{
return (byte[])_SITUACION;
}
set{
_SITUACION = (byte[])value;
}

alguna idea de lo que estoy haciendo mal???

gracias!!!


Información adicional: Parámetro utilizado no válido.
"Marino Posadas" escribió en el mensaje
news:
Hola Javier

Es que si las importas de Access añaden 78 bytes debido al soporte de
OLE, que deberás de eliminar:

Por ejemplo si tienes la imagen en un campo de un DataSet, su formato
será base64Binary, y por lo que puedes recuperarlo desde el evento Format
de un Binding que tengas a un PictureBox, por ejemplo, con el siguiente
código:

// Formatea el valor enlazado para encajarlo en la propiedad

private void PictureBox_Format(object sender, ConvertEventArgs e)

{

//Convierte los bits de imagen en un objeto Bitmap que se puede

//asignar a un PictureBox : e.Value es el valor original

byte[] img= (byte[]) (e.Value);

//Conversión

MemoryStream ms= new MemoryStream();

int offset = 78;

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

Bitmap bmp = new Bitmap(ms);

ms.Close();


//Escribe el nuevo valor convertido

e.Value = bmp;

}

Espero que te sirva.


Saludos cordiales
Marino Posadas
MVP Visual C#

www.ElAveFenix.net


"Javier" escribió en el mensaje
news:%
Tengo un problema, desde mi aplicacion deberia de poder cargar las
imagenes que hay en una base de datos en access, estas imagenes las han
insertado copiando y pegando directamente en access, en los componentes
del formulario de access que tenian, pero ahora queremos hacer una
aplicacion y tenemos que usar las mismas imagenes, pero he probado
varios metodos para cargar esas imagenes leyendolas como un array de
bytes, luego pasando a MemoryStream, y de alli un Image.FromStream...
pero nada, me dice "Parametro no valido", y he probado varios metodos
que he encontrado por internet, pero no se que es lo que estoy haciendo
mal, o donde puede estar el problema, si alguien pudiese ayudarme le
estaria muy agradecido!!!

Gracias.












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