DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Mostrar Imágenes en Crystal Reports, al estilo de Galería

Por royrojas | 8/28/2005 | Visitas 54,835 | Voto 5.00
En este artículo vamos a explicar como mostrar imágenes en Crystal Reports, ya sea que las carguemos de la base de datos o que las carguemos del disco duro con el path de la imagen.
Categorías : VB.NET
Descargar Solución ImagenesEnCrystalReports.zip

Para poder mostrar imágenes en Crysta Reports, estas tienen que estar convertidas a Byte, ya que no se puede cargar un formato .jpg o .gif directamente. Para poder hacer esto necesitamos una función que nos convierta estos formatos a el formato Byte que es el aceptado.

'Esta función convierte la imagen a Byte
Public Function ImageToByte(ByVal pImagen As Image) As Byte()
Dim mImage() As Byte
Try
If Not IsNothing(pImagen) Then
Dim ms As New System.IO.MemoryStream
pImagen.Save(ms, pImagen.RawFormat)
mImage = ms.GetBuffer
ms.Close()
Return mImage
End If
Catch
End Try
End Function


Un aspecto importante si vamos a tener almacenadas las fotos en la base de datos es tener la tabla correctamente creada, un ejemplo podría ser:

CREATE TABLE [TABLA_IMAGENES] (
[cod_imagen] [numeric] (3,0) NOT NULL,
[des_imagen] [numeric](3, 0) NOT NULL ,
[img_imagen] [image] NOT NULL ,
CONSTRAINT [SYS_C0010528] PRIMARY KEY CLUSTERED
(
[cod_imagen]
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


Para el reporte vamos a tener un dataset donde vamos a cargar los datos y enviarlo a Crystal. La tabla en el dataset debe ser creada con el siguiente código.

<xs:element name="Imagenes">
<xs:complexType>
<xs:sequence>
<xs:element name="Codigo" msdata:Caption="Codigo"
type="xs:short" minOccurs="0" />
<xs:element name="Descripcion"
type="xs:string" minOccurs="0" />
<xs:element name="Imagen" msdata:Caption="Imagen"
type="xs:base64Binary" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>


Para este ejemplo vamos a cargas las imágenes que tenemos en el disco duro, pero bien podría ser que tomemos las imágenes de la base de datos, o bien una combinación de los dos, por que en la base de datos podríamos tener almacenada solo el path del archivo en lugar de tener almacenada la imagen.

'Este ReturnDataSet es solo a modo de ejemplo,
'lo ideal es que el dataset sea el producto de alguna consulta a la base de datos,
'solo que para efectos del ejemplo creamos el dataset manualmente.
Private Function ReturnDataSet() As DataSet
Dim dt As New DataTable
Dim dr As DataRow
Dim ds As New DataSet

dt.Columns.Add(New DataColumn("Codigo", GetType(Short)))
dt.Columns.Add(New DataColumn("Descripcion", GetType(String)))
dt.Columns.Add(New DataColumn("Imagen", GetType(Byte())))

dr = dt.NewRow()
dr("Codigo") = 1
dr("Descripcion") = "Imagen 1"
'Aqui leemos la imagen de nuestro disco duro.
dr("Imagen") = ImageToByte(Image.FromFile("..\Imagen1.jpg"))
dt.Rows.Add(dr)

dr = dt.NewRow()
dr("Codigo") = 2
dr("Descripcion") = "Imagen 2"
dr("Imagen") = ImageToByte(Image.FromFile("..\Imagen2.jpg"))
dt.Rows.Add(dr)

dr = dt.NewRow()
dr("Codigo") = 3
dr("Descripcion") = "Imagen 3"
dr("Imagen") = ImageToByte(Image.FromFile("..\Imagen3.jpg"))
dt.Rows.Add(dr)

ds.Tables.Add(dt)
ds.Tables(0).TableName = "Imagenes"

Dim iDS As New dsImagenes
iDS.Merge(ds, False, System.Data.MissingSchemaAction.Ignore)
Return iDS
End Function


Y para asignarle el dataset al reporte de Crystal lo hacemos de la siguiente forma

rpt.Load()
rpt.SetDataSource(ReturnDataSet)
rpt.Refresh()


En el archivo que se puede descargar viene todo el ejemplo completo con las imágenes para que el ejemplo funcione perfectamente, y el resultado final debería verse así



Descargar Solución ImagenesEnCrystalReports.zip
Area de Comentarios
Por royrojas - Fecha: 2005/10/03 04:28 PM
Es importante hacer notar que este ejemplo funciona con la version de Crystal Reports que esta incluida en el Visual Studio 2003, o bien tambien con las version 10 de Crystal Reports.
Por Anónimo - Fecha: 2005/11/30 02:32 PM
mi pregunta es porque manda error en esta linea dr("Imagen") = ImageToByte(Image.FromFile("..\Imagen3.jpg"))
y si me podrias explicar mas adetalle como cargar mi imagen desde disco duro pero en vb.net sin asp
Por royrojas - Fecha: 2005/12/13 11:47 PM
cual error es el que te da?

podria ser que las imagenes no estan en la ruta correcta, deberia estar en el nivel inferior al bin.
o podrias ponerlas en cualquier sitio y cambiar el path de la ruta del archivo.

el ejemplo que esta aqui es para cargar imagenes en vb.net, winforms, para web se utiliza server.matpath
Por Anónimo - Fecha: 2006/01/29 03:35 AM
tio, eres un Crack! Gracias!!!
Por NANO - Fecha: 2006/03/28 01:07 AM
tengo un problema, la imagen esta en la base, utilizo un dataset para extraer los datos, pero cuando diseño el reporte y pulso finalizar el campo de la imagen no aparece... cual es el problema
Por Anónimo - Fecha: 2006/04/03 01:29 PM
la verdad es que esta bien, pero a mi me interesa, dar un paso mas, a ver, lo que necesitaría que aun no lo he visto en ningún lado es que en vez de tener un campo imagen en la base de datos, tener un campo de texto y ahí guardas la ruta de la imagen, y despues segun la opcion que se selecione, muestre una imagen u otra
Por Anónimo - Fecha: 2006/05/16 06:50 AM
¿Cómo se pueden cargar las imágenes de forma que se respete su tamaño y proporción original?
Por royrojas - Fecha: 2006/06/28 11:12 PM
me parece que ese es un problema con esta version de crystal, no respeta el formato de los tamaños de las imagenes, deberias de manejar siempre para un reporte imagenes del mismo formato proporcional de tamaño.
Por Anónimo - Fecha: 2006/10/05 04:31 AM
como puedo solucionar si mis imagenes son dinamicas, ya que se estan distorcionando
Por Anónimo - Fecha: 2006/10/08 12:49 AM
excelente ejemplo, me ayudo bastante.

Saludos.
Por Anónimo - Fecha: 2006/11/06 12:09 PM
Realemte se ve muy interesante, lo pondre en prueba..
Bueno , quisiera que me ayuden, Como haria para cargar una imagen a una BD en una pagina Asp.net, Agradesco de antemano su aporte ...
Por Anónimo - Fecha: 2007/01/04 11:11 AM
Como puedo hacer para colocar una imagen en el Reporte, pero que luego esta no se imprima
Por Anónimo - Fecha: 2007/04/19 09:29 AM
Genial, llevaba un monton de tiempo buscando como hacer esto. No exactamente asi pero me sirvio tu solucion !!!! graciaaaaas
Por Anónimo - Fecha: 2007/05/21 12:19 AM
Muy buen articulo

Pero tengo una duda este proceso se puede hacer para web porque ya lo intente y no funciono

Si se puede hacer me podrias decir que cambios necesito hacer

Gracias
Por Anónimo - Fecha: 2007/06/01 06:25 AM
Joe, me pasa exacatamente lo mismo. Lo tengo igual al ejemplo pero en ASP.NET con VS 2005 y no se muestra ninguna imagen.
He recorrido 200 articulos y no consigo hacer que se muestre.
Si por favor teneis alguna solucion os lo agradeceria enormemente.

Muchas gracias.

P.D: el articulo, aunque no m e sirva directamente esta muy, muy bien explicado, de veras
Por Anónimo - Fecha: 2007/06/11 12:47 PM
Se ve muy interesante tu ejemplo, pero como se realizaria desde VB6.0, ya que tengo almacenadas las rutas de las imagenes en una BDD
Por Anónimo - Fecha: 2007/07/08 05:53 AM
Al ejecutar este codigo me surge el siguiente error con un ordenador en windows 2000, vs2005 y el crystal suministrado en esta versión: "Error en archivo c:\temp\XXXX.rpt : No se puede enviar la solicitud para procesamiento de fondo"
En equipos con Windows Xp me ha funcionado.

Si elimino la linea de a la que llamo a la funcion ImagetoByte si me funciona el reporte.
Y si elimino la linea de pImage.save(ms, System.Drawing.Imaging.ImageFormat.jpeg) tambien funciona... Pero claro sin foto.
¿Alguien sabe alguna solución?
Por Anónimo - Fecha: 2007/07/16 08:54 AM
Esto también funciona en visual studio 2005
Por Anónimo - Fecha: 2007/07/16 09:06 PM
Que buen articulo, oye, de3 casualidad sabes como hacer para insertar imagenes en marca de agua en Crystal?
Por Anónimo - Fecha: 2007/11/16 02:48 PM
Muy buen artículo Roy, lo veo muy simple de seguir,
solo me quedó la duda de como hacer si tengo una clase que retorna
un DataSet que fue extraído de una base de datos.
Porque a como lo veo en tu artículo vas llenando cada DataRow 1 por 1.
Me interesaría ver el ejemplo pero con un DataSet que viene directamente
desde una base de datos.
saludos,
-eduardo s.m.
Por Anónimo - Fecha: 2007/11/19 07:30 PM
un millon de gracias!!!!!!!!!!!!
anda todo perfecto!!!!!!!!!
José Federico Bertoncini
federico.bertoncini@hotmail.com
Por Anónimo - Fecha: 2007/12/18 11:29 AM
Hola. Tengo las imagenes en base de datos y cualquier formato de imagenes, me lo muestra bien, excepto con imagenes de tipo .gif. ¿me podeis ayudar?

Gracias
Por Anónimo - Fecha: 2008/01/22 05:03 PM
Hola como hago para que me funcione en asp.net 2005 que no corre... y da un error
System.IO.FileNotFoundException:
y la imagen esta alli....
Por Anónimo - Fecha: 2008/08/13 10:26 AM
muy bueno el articulo.. le doy mil puntos
Por Anónimo - Fecha: 2008/08/26 03:03 PM
excelente gracia!!
Por Anónimo - Fecha: 2008/09/15 08:27 AM
Hola me parece interesante tu articulo, el tema es que me gustaria saber si esto lo puedo aplicar con visual basic 6 y crystal report 8. Gracias.
Por Anónimo - Fecha: 2008/10/30 03:54 PM
Yo lo intente hacer esto mismo pero con visual studio 2005.. y nada mas no dio ni una.. me podrias explicar lo mismo pero con 2005? :-S
Por Anónimo - Fecha: 2008/11/06 09:50 PM
esta bien hecho el articulo lo que hay que hacer es dar bien la ruta ejemplo c:\mis documentos\imagen.jpg si sale not foudn es por q no esta bien escrita la imagen con la extencion o no esta, de resto sale bien, me mostro la imagen y todo. y es tanto para vb net como para asp net gracias
Por Anónimo - Fecha: 2008/11/21 09:18 AM
Excelente ejemplo, lo probe en Visual Studio 2008 professional y funciono correctamente. Felicidades.
Por Anónimo - Fecha: 2010/03/06 12:45 AM
buena compañero justo lo que buscaba
Por Anónimo - Fecha: 2010/09/16 07:16 PM
te fumaste un porro pero esta buena la solucion.. voy a extrapolarlo a delphi
Por Anónimo - Fecha: 2010/10/02 02:11 PM
El ejemplo esta muy bueno, pero como se hace cuando la foto que debe mostrar, debe hacerlo de acuerdo al NOMBRE DE UN CLIENTE, es decir cuando muestro al CLIENTE1 debe mostrar su foto y CLIENTE2 con sus datos y foto. Hasta ahora no lo resuelvo.
Por Anónimo - Fecha: 2011/07/04 06:48 PM
me ha sido de mucha ayuda gracias
Por Anónimo - Fecha: 2011/07/28 03:53 PM
buenisimo,con esto se puede hacer variaciones...
gracias excelente
Por Anónimo - Fecha: 2011/09/25 11:02 PM
hola k tal me gusto mucho tu ejemplo, he estado buscandpo algo asi pero tmb busco hacerlo mediante rutas guardando la ruta de la imagen en un campo texto en mi base de datos y mandarla a llamar para mostrarse en el crystal... tendras alguna idea de como hacerlo? he buscado por la web y no encuentro algo parecido... saludos
Por Anónimo - Fecha: 2011/10/05 01:27 AM
y para c sharp 2008 como seria
Por Anónimo - Fecha: 2011/11/14 01:47 PM
Excelente amigooooo me has hecho el dia gracias
Por Anónimo - Fecha: 2012/05/01 07:12 PM
Gracias tio, me ayudo mucho!. saludos dsd Olmos-PEru
Por Anónimo - Fecha: 2012/06/21 08:10 AM
Oye mira tu ejemplo es bueno pero lo que no entiendo es si tengo almacenada la ruta de la imagen ejmp "C:\Users\Public\Pictures\Sample Pictures\Koala.jpg" en mi base de datos en (Image.FromFile("C:\Users\Public\Pictures\Sample Pictures\Koala.jpg") pero me sale un error iciendome me puedes ayudar pana
Por Anónimo - Fecha: 2012/08/08 09:41 AM
tu ejemplo esta bueno, me funciona, como haria para para sacar las images de un bd en sql server
Por Anónimo - Fecha: 2012/09/27 07:11 AM
Ya learn something new erveyday. It's true I guess!
Por Anónimo - Fecha: 2012/09/28 06:38 PM
ijeCMB , [url=http://dnuemrypqouk.com/]dnuemrypqouk[/url], [link=http://xzeizhtiycws.com/]xzeizhtiycws[/link], http://mpfrjzfqqits.com/
Por Anónimo - Fecha: 2012/09/30 06:38 AM
FsdUWY , [url=http://tytwervsnubn.com/]tytwervsnubn[/url], [link=http://jmsncdeaogth.com/]jmsncdeaogth[/link], http://sbmffllcqhfh.com/
Por Anónimo - Fecha: 2015/04/01 05:46 PM
muy bien
Por Anónimo - Fecha: 2016/08/31 12:17 PM
Very informative post.Really thank you! Awesome. akgeabbekkcc
Por Anónimo - Fecha: 2016/09/01 06:21 AM
Very nice site! [url=http://apeoixy2.com/tqtoav/2.html]cheap goods[/url]
Por Anónimo - Fecha: 2016/09/02 12:37 PM
Very nice site! [url=http://aixypeo2.com/ayvkra/2.html]cheap goods[/url]
Por Anónimo - Fecha: 2016/09/02 12:37 PM
Very nice site! cheap goods http://aixypeo2.com/ayvkra/4.html
Por Anónimo - Fecha: 2016/09/02 12:37 PM
Very nice site!
Por Anónimo - Fecha: 2016/09/03 07:06 PM
Very nice site! [url=http://aieypxo2.com/tosyxs/2.html]cheap goods[/url]
Por Anónimo - Fecha: 2016/09/03 07:06 PM
Very nice site! cheap goods http://aieypxo2.com/tosyxs/4.html
Por Anónimo - Fecha: 2016/09/03 07:07 PM
Very nice site!
Por Anónimo - Fecha: 2016/09/05 01:54 AM
Very nice site! [url=http://oieapxy2.com/tyvkrt/2.html]cheap goods[/url]
Por Anónimo - Fecha: 2016/09/05 01:54 AM
Very nice site! cheap goods http://oieapxy2.com/tyvkrt/4.html
Por Anónimo - Fecha: 2016/09/05 01:54 AM
Very nice site!
Por Anónimo - Fecha: 2016/09/06 07:54 AM
Very nice site! [url=http://ypxaieo2.com/ooosyay/2.html]cheap goods[/url]
Por Anónimo - Fecha: 2016/09/06 07:54 AM
Very nice site! cheap goods http://ypxaieo2.com/ooosyay/4.html
Por Anónimo - Fecha: 2016/09/06 07:54 AM
Very nice site!
Por Anónimo - Fecha: 2016/09/07 02:06 PM
Very nice site! [url=http://oixypea2.com/qxqtovq/2.html]cheap goods[/url]
Por Anónimo - Fecha: 2016/09/07 02:06 PM
Very nice site! cheap goods http://oixypea2.com/qxqtovq/4.html
Por Anónimo - Fecha: 2016/09/07 02:06 PM
Very nice site!
Por Anónimo - Fecha: 2016/09/08 08:13 PM
Very nice site! [url=http://oixypea2.com/oxosyar/2.html]cheap goods[/url]
Por Anónimo - Fecha: 2016/09/08 08:13 PM
Very nice site! cheap goods http://oixypea2.com/oxosyar/4.html
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
pedrojavier
CALIN
willipinru
richard
ragomez
shizumiru
PER 238
MEX 236
CRI 188
COL 118
ESP 105
ARG 88