Recuperar IMAGEN de un QUERY
HOLA:
Tengo un pequeño problema. Tengo un query que obtiene la clave de una persona y su fotografía. Lo que busco es que me muestre la foto de la persona... Es muy simple pero no se que me falta. Intenté con el DBimage y el Datasource pero me dibuja solo la mitad de la imagen. Probé codigo que encontré en Internet pero algo me esta faltando... me marca error en la linea donde le asigno la imagen al objeto del formulario. Este es el codigo que probé, si me pueden ayudar a ver donde esta el error... De antemano gracias! Var Stream: TMemoryStream; Jpg: TJpegImage; Begin Stream := nil; Jpg := nil; query1.SQL.Clear; query1.Close; query1.SQL.Text:='select * from foto where foto_cve='''+Edit1.text+''''; query1.Open; try Stream := TMemoryStream.Create; TBlobField(query1.FieldByName('FOTO_IMAGEN')).SaveToStream(Stream); if Stream.Size > 0 then begin Stream.Position := 0; Jpg := TJpegImage.Create; Jpg.LoadFromStream(Stream); Image1.Picture.Assign(Jpg); :confused::confused::confused: Aqui marca error ... ... ... etc. |
:confused: ¿y que error te da?
|
Realmente seria muy bueno si nos aclararas cual es el error que te muestra pues no somos adivinos, pero de todas formas mira la pagina 369 del libro "La cara oculta de delphi 4" ofrecido gratuitamente en la pagina de Ian Marteens, allí te dice como capturar imagenes de la BD.
|
El error que marca es:
Project xxx.exe raised exception class EJPEG with message ‘JPEG error #53’. Process stopped… |
STFW
http://www.capmac.org/phpbb2/viewtopic.php?p=6884 Lo más problable es que la imagen sea muy grande y tengas problemas de memoria, prueba lo hacer lo mismo pero con una imagen más pequeña. |
Marca que no he declarado el identificador TBlobStream.
|
Cita:
Cita:
Pero te recomiendo dos cosas: 1) Debes tener en cuenta la sugerencia de ContraVeneno. 2) Lee la pagina de el libro que te sugerí anteriormente. |
La imagen no creo que sea muy grande. La exporté desde un manejador de BD y ya como archivo el tamaño que me indica es de 298K.
|
Bueno, y entonces ¿como te fue con lo del libro o con los cambios que te sugerí?
|
:rolleyes:Se necesita alguna clase especial o algo así? me marca lo mismo sobre el identificador, el problema es que lo marca en el 'TBlobStream' no en la variable 'Stream'.
Con respecto al libro, llevo desde que me lo sugeriste hasta este momento y aun no lo baja... pero en eso estoy.:p Y pues de la imagen, ustedes creen que sea el tamaño? como ya les expliqué mide menos de 300 k... Tengo la idea de extraer la imagen y guardarla en un archivo BMP o JPG, el problema es que no se como hacerlo... tal vez esa sería la solución, ustedes que creen? Gracias |
Solo por curiosidad, en tu código introduce la siguiente linea:
Así la imagen se guardara en el disco duro. Ahora abre la imagen con otro programa y comprueba que esta bien. |
Particularmente ya no creo que sea el tamaño, lo que si se me habia olvidado preguntar era el tipo de imagen que estabas manejando, desde un princio asumi que era JPG... Porque tenias declarada una variable de tipo TJpegImage.
Cita:
|
Ya probé bien la opcion de Seoane, sin embargo no crea bien el dibujo. El libro aun está en proceso.
|
Hola a todos
Perdon que me entrometa, para cargar una imagen de la tabla, que yo sepa no se necesita nada en especial ya que se toma como un archivo mas. Yo dejaria esta parte y lo haria con el DBimage enlazado al datasource. Ahora en el DBimage en la propiedad Stretch, la pasaria a True, con esto la imagen tomara la dimension del tamaño que le des al componente. Digo todo esto porque asi lo hago yo y no tengo nigun problema, ademas si le cambio en propiedad los anchors, me la muestra mas grande si cambio la dimension del form. Saludos |
1) Con cual codigo te muestra este ultimo error?.
2) Que tipo de conexion estas usando? 3) Si estas usando BDE. ¿Tienes la seguridad de que estas asignando el Alias correctamente y tienes conexion a dicha BD? Este ultimo punto lo planteo porque veo que en el codigo que mostraste dice asi:
Aal parecer todo lo estas asignando en ejecución y veo que falta la propiedad databasename la cual no esta siendo asignada. y tal vez por eso te muestra este ultimo error, ;) |
Obviamente les simplifiqué el código.... EN cada query selecciono bien la tabla, el problema no es el query... me marca error hasta que le asigno la imagen Stream al objeto Image
COmo ya dije, me crea el archivo pero con error, es decir no sale nada de nada... |
|
Hola
Perdonen que insista pero si se dice esto: Cita:
Saludos |
Cita:
|
Yo pense que con "me muestra la imagen a la mitad", se refería a que la imagen estaba incompleta, por eso fue que pense en la falta de memoria para completar de cargar la imagen....
|
Cita:
|
Hola
Habria que ver que dice natalinuyo, tal vez estoy equivocado :D Saludos |
No es lo que estan pensando... No es cosa del tamaño de la imagen, es decir de la foto completa del rostro de la persona, solo me DIBUJA la mitad...
ContraVeneno esta en lo cierto... Sigo intentando... Jhonny, esta parte ya la probé y no hay cambios. Código Delphi [-]Image1.Picture.Assign(Jpg); Por Código Delphi [-] Image1.Picture.Graphic := Jpg; |
Hola
Pregunto: Si la foto esta en una bd, como es jpg ? Saludos |
Que cosas no!
El punto es que donde tengo el query es un modulo aparte. Aparentemente me falta algo en uses dado que cuando coloco el TblobStream en este modulo me marca que no lo reconoce... Para probar lo coloqué en el .pas principal (donde esta todo el rollo de los objetos y cosas de esas) y ahí no marca error... Pero... yo lo necesito en el submodulo, porque solo ahí puedo poner el Query... Pero pues se me agotan las opciones, creo que hemos probado de casi todo... Por cierto ya chequé el Libro, pero dada mi situación creo que no es de mucha ayuda.... :) Saludos |
Hola natalinuyo
Me sigue intrigando: La imagen esta en una base de datos? La imagen esta completa en la base de datos? Para mi si la imagen esta en la base de datos, cargara, sea del tamaño que sea, lo que podria variar es la velocidad de carga, no la imagen. Pregunto: Donde esta la imagen? Que base de datos usas? Simple curiosidad Saludos |
Ok
La imagen es una fotografía de una persona. La imagen esta almacenada en una BD Oracle... La imagen la obtengo por medio de una consulta que hago a la tabla FOTO. Tengo otro fomulario donde capturo las fotos de las personas, en esa pantalla no tengo mayor problema. En esta pantalla manejo un TDBImage y uso la propiedad DataSource, en esta ventana SI me muestra la foto ya desde la tabla... Sin embargo en esta otra pantalla no funciona... Solo me dibuja la mitad de la foto.:( |
Hola natalinuyo
Hay un dicho que dice, lo que es bueno para el ganso es para la gansa. Osea si ves la foto en el primer form, no veo la razon de no verla en el segundo. Sinceramente no veo la relacion que se quiere dar al query o al uses en esto, el query simplemente hace un enlace con la tabla, el datasource hace un enlace con el TDBImage y se muestra la informacion, no veo cual es el problema, y el uses pues simplemente liga form, viendolo sencillamente. Como sugerencia, seguiria los pasos que hiciste en el primer form y los copio al segundo, cual es el problema que sea otro form diferente? Saludos |
Esto es lo ultimo.... :p
Ok, ya tengo la foto de la BD, esta en memoria. Guardo la imagen en disco duro:
Para mostrarla en pantalla, le cargo la imagen desde el archivo:
Pues funciona... pero una vez más me DIBUJA solo la mitad!?! NOTA: Cuando intento abrir el archivo de imagen desde el disco duro, marca que el archivo tiene error... aun así me muestra la mitad de la foto en pantalla :confused: |
Cita:
|
Hola
Te aconsejo hacer una prueba simple. Haz un enlace con un table, no con un query a la tabla donde esta la foto. Coloca un datasource y un dbnavegator ligados al table. Coloca un dbimagen ligado al datasource ligado al campo donde estan las fotos. Corre el form y con el navegator recorre la tabla. A ver si se muestran as fotos, completas o incompletas o si de plano no se muestran. Lo que no me parece necesario es recoger una foto de la bd, colocarla en memoria, grabarla en disco y luego llevarla al form, es mucho trabajo innecesario. Prueba esto ultimo, es lo mas sencillo, y ya diras Saludos |
Porque será que hay problemas con el query?:confused:
Es algo confuso que cuando hago referencia directo a la tabla dibuje completas las fotos, pero al momento de utilizar el query solo dibuje la mitad. Por el momento lo he dejado por la paz. Les agradezco a todos por haberme ayudado. Pero si alguien sabe el 'meollo' (la vdd no se como se escribe :p ) del problema es Bienvenido.:o |
La franja horaria es GMT +2. Ahora son las 04:37:58. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi