Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-09-2005
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Question 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;
Tambien he de decir que he incluido en las uses jpeg;
Seguramente será alguna tonteria pero no doy con ella.
Responder Con Cita
  #2  
Antiguo 10-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 20
jmariano Va por buen camino
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.

Código Delphi [-]
var
  MS: TMemoryStream;
  B: TBitmap;
begin
  if not q_trabajadoresfoto.IsNull then
  begin
    MS := TMemoryStream.Create;
    B := TBitmap.Create;
    q_trabajadoresfoto.SaveToStream(MS);
    B.LoadFromStream(MS);
    foto.Picture.Assign(B);
    MS.Free;
    B.Free;
  end
  else foto.Picture := nil;

Saludos!
Responder Con Cita
  #3  
Antiguo 10-09-2005
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Gracias por responder a mi problema, lo probaré y ya mañana contaré como me fue.
Saludos.
Responder Con Cita
  #4  
Antiguo 11-09-2005
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 12-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 20
jmariano Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 12-09-2005
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
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.
Código Delphi [-]
if not q_trabajadoresfoto.IsNull then
     begin
     B := TBitmap.Create;//TJPEGImage.Create;
     MS := TMemoryStream.Create;
     q_trabajadoresfoto.SaveToStream(MS);
     B.LoadFromStream (MS);
     foto1.Picture.Assign(B);
     MS.Free;
     B.Free;
     end
     else
     foto1.Picture := nil;
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.
Responder Con Cita
  #7  
Antiguo 12-09-2005
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 13-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 20
jmariano Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 13-09-2005
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Gracias por la información, estudiaré el tema y ya comentaré los resultados.

Saludos.
Responder Con Cita
  #10  
Antiguo 15-09-2005
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Thumbs up

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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:00:08.


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
Copyright 1996-2007 Club Delphi