FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Error jpeg #41 al cargar imagen en TImage
Saludos compañeros,
Después de buscar mucho por el foro, no consigo resolver este error, espero me podais ayudar. Lo que hago es cargar una imagen en un TImage en el evento afterscroll del dataset, para ello utilizo el código facilitado en un hilo del foro. Código:
var B : TJPEGImage; MS : TMemoryStream; begin B := TJPEGImage.Create; MS := TMemoryStream.Create; q_trabajadoresfoto.SaveToStream(MS); B.LoadFromStream (MS); foto.Picture.Assign (B); MS.Free; B.Free; end; Seguramente será alguna tonteria pero no doy con ella. |
#2
|
||||
|
||||
Tu problema, seguramente, es que el campo Blob no tiene almacenada la imagen en formato jpeg (de ahí el error en el formato), así que tendrás que usar la clase TBitmap en vez de TJPEGImage.
Saludos! |
#3
|
||||
|
||||
Gracias por responder a mi problema, lo probaré y ya mañana contaré como me fue.
Saludos. |
#4
|
||||
|
||||
Saludos, JMariano,
He probado por fin lo que me dijiste y efectivamente ya no se produce ningún error, pero las imagenes no se muestran en el 'TImage', existen grabados 5 o 6 registros de prueba, algunos con el campo imagen nulo, otros con BMPs y uno con un JPEG, pero ningún registro muestra nada. ¿que falla ahora?. Otra cosa que me interesaria es poder mostrar indistintamente cualquier formato que soporte el componente TImage pues por parte de la base de datos no tengo problemas ya que estoy utilizando Interbase 6.0 y el campo blob se come cualquier cosa. Saludos. |
#5
|
||||
|
||||
No se bien porque quieres usar el control TImage pero ¿Porque no pruebas con el control TDBImage? Este control te permite, precisamente, visualizar las imágenes de tu base de datos sin necesidad de tener que actualizarlo en el evento "AfterScroll" (además, puedes hacerlo de sólo lectura, a través de la propiedad "ReadOnly", si no quieres que nadie pueda modificar la imagen en el mismo control).
Otra cosa, ¿Como estás almacenando las imágenes en la base de datos? (Te lo pregunto porque la últime vez que tuve esta necesidad, nunca conseguí almacenarlas como jpeg sino siempre como bitmap. Es decir, siempre las tenía que almacenar "descomprimidas"). Saludos! P.D: Aunque necesites usar el control TImage, prueba a usar TDBImage para comprobar que se visualizan las imágenes, ya que si no fuera así es que algún problema está habiendo en la base de datos. |
#6
|
||||
|
||||
El control TdbImage fue lo primero que empleé pero me daba error precisamente cuando intentaba grabar un jpeg, por lo demás se visualiza perfecto(cuando es un bmp). Así pues, hallé la respuesta en el foro y era que el dbImage no funciona bien con jpeg, no recuerdo ahora el error que me daba, pero se aconsejaba utilizar la clausula jpeg en el uses. Así lo hice y seguía sin funcionar por lo que decidí quitar el control y utilizar un TImage.
El codigo para cargar la imagen al control también lo saqué del foro (a través del TMemorystream), con estos cambios todo deberia funcionar y ya no salta ningún error pero sigue sin salir la imagen. Lo único que no he probado es refrescar el control despues de hacerle la asignacion de la variable o tal vez un 'repaint'. Voy a probarlo ahora y te cuento... Saludos. |
#7
|
||||
|
||||
Me sigue sin funcionar....
Ya no se de que puede ser... Estoy en blanco... Haber si se te ocurre algo JMariano y gracias de antemano pero es que me monto unos lios imposibles. |
#8
|
||||
|
||||
El problema es que jpeg es un formato comprimido de imagen que, ademas de la imagen, puede contener información adicional, y es por esta información, precisamente, por la que puede que te esté dando error (tambien es por esto que no se puede usar un control DBImage con un jpg, ya que no sabe como manejar dicha información). Así que para hacer lo que quieres tendrás que hacer alguna operación extra además de cargar la imagen. Leete el siguiente artículo que te va ayudar mucho: http://delphi.about.com/od/database/l/aa030601a.htm (los ejemplo son para ADO, pero lo puedes adaptar tanto para BDE como para InterBase o para el ClientDataSet)
Saludos! Última edición por jmariano fecha: 13-09-2005 a las 04:59:29. |
#9
|
||||
|
||||
Gracias por la información, estudiaré el tema y ya comentaré los resultados.
Saludos. |
#10
|
||||
|
||||
Hola JMariano,
he encontrado la solución por fin. Al final encontré otro articulo que me resulto quizas más claro he interesante para dar solucion a mi problema. Además ya lo he probado y funciona muy bien. Aquí pongo el enlace para que todos puedan echarle un vistazo. Desde luego recomiendo su lectura atentamente. www.latiumsoftware.com/es/pascal/0011.php Por último muchas gracias por tu interes y tu ayuda. Saludos. |
|
|
|