Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-01-2006
dape dape is offline
Miembro
 
Registrado: ene 2004
Ubicación: Tacna - Perú
Posts: 138
Poder: 21
dape Va por buen camino
Problemas para mostrar JPEG

¡hola amigos!, sí, sí ya sé que este tema ya se trato, es mas, he utilizado alguno de los concejos que se dan acá para mostrar imagenes jpeg almacenadas en una base de datos, pero nada, no me muestra nada.

Este es el código que utilizo para mostrar la imagen:

Código Delphi [-]
if (dmcpaf.MDOSPselect_afiliadoFOTO_AFIL.IsNull) then
//para registros sin foto poner imagen vacia
imgfoto.Picture:=nil
else
begin
imgfoto.Picture.Graphic:=TJpegImage.Create;
//copiar los datos desde la tabla con un stream
m:=dmcpaf.MDOSPselect_afiliado.CreateBlobStream(dmcpaf.MDOSPselect_afiliadoFOTO_AFIL, bmRead);
imgfoto.Picture.Graphic.LoadFromStream(m);
m.Free;
end;

al evaluarse el condicional, el resultado que obtengo es que el campo está vacío, aun esta contenga una imagen, la solución que encontre es negar el condicional, quedando de la siguiente manera:

Código Delphi [-]
if not (dmcpaf.MDOSPselect_afiliadoFOTO_AFIL.IsNull) then

al hacer este cambio ya puedo intentar mostrar la imagen, así que paso al bloque else...end y que creen ¡zas! salta un error, el "Error JPEG #42" y a decir verdad no sé que significa, pensé que a lo mejor estoy guardando mal imagen así ejecuto una consulta en el IBexpert y puedo ver la imagen, así que no creo que sea problema de mal guardado de la misma, por si acaso, esta la guardo con:

Código Delphi [-]
mdospputafiliado.ParamByName('foto_afil').LoadFromFile(s_imgpath,ftBlob);

donde s_imgpath es la ruta de la imagen a guardar.

utilizo delphi 7 y FB1.5, esto por si sirve de algo.

Espero puedan darme una idea de como solucionar mi problema y desde ya les doy las gracias por la ayuda que me brinden

Saludos desde Tacna - Perú

David
  #2  
Antiguo 11-01-2006
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

No se si será por la forma de guardar la imagen o por qué pero te copio el código que uso por si te sirve de algo. A mi me funciona bien en FireBird.

Como puedes ver guardo en un campo blob la foto y en un campo varchar el formato, por si hay fotos en formato .jpg o .bmp

Para mostrar la foto guardada uso un TImage, y para imprimirla con QuickReport un TQRImage .

DM. es un DataModule

Código Delphi [-]
uses
   ..... DB, Jpg, ...;


//cargar foto
procedure TFDatos.Cargarfoto1Click(Sender: TObject);
var
  m, f: TStream;
  s: string;
begin
  //se abre picturedialog para cargar fichero foto que se coja
  if dlgOpenPicture.Execute then
    begin
      //modo edición
      DM.IBDSAlumnos.Edit;
      //stream a partir campo Blob que contendrá la imagen
      m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmWrite);
      //stream para acceder al archivo gráfico
      f:= TFileStream.Create(dlgOpenPicture.filename, fmOpenRead);
      //copiar de un stream a otro
      m.CopyFrom(f, f.Size);
      //coger formato foto y ponerlo en campo correspondiente
      s:= AnsiUpperCase(ExtractFileExt(dlgOpenPicture.FileName));
      if s='.JPEG' then
        s:= '.JPG';
      DM.IBDSAlumnosFORMATOFOTO.AsString:= Copy(s,2,3);
      DM.IBDSAlumnos.Post;
      //destruir streams
      f.Free;
      m.Free;
    end
end;

//borrar foto
procedure TFDatos.Borrarfoto1Click(Sender: TObject);
begin
  //borrar imagen
  ImageFoto.Picture.Assign(nil);
  //borrar foto del campo blob
  if (DM.IBDSAlumnos.State <> dsEdit) and (DM.IBDSAlumnos.State <> dsInsert) then
    DM.IBDSAlumnos.Edit;
  DM.IBDSAlumnosFOTO.Assign(nil);
  DM.IBDSAlumnos.Post;
end;

//mostrar imagen (evento on change de datasource)
procedure TFDatos.DSAlumnosFDataChange(Sender: TObject; Field: TField);
var
  m: TStream;
begin
  if DM.IBDSAlumnosFOTO.IsNull then
    //para registros sin foto poner imagen vacia
    ImageFoto.Picture := nil
  else
    begin
      if DM.IBDSAlumnosFORMATOFOTO.AsString = 'BMP' then
          //si es formato BMP
          ImageFoto.Picture.Graphic:= TBitmap.Create
      else if DM.IBDSAlumnosFORMATOFOTO.AsString = 'JPG' then
          //si es formato JPG
          ImageFoto.Picture.Graphic:= TJpegImage.Create
      else
        Exit;
      //copiar los datos desde la tabla con un stream
      m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmRead);
      ImageFoto.Picture.Graphic.LoadFromStream(m);
      m.Free;
    end;
end;

Un saludo.
  #3  
Antiguo 21-07-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
Pregunta sobre el codigo de este tema:

Hola amigos,

En este muy buen ejemplo, de mensajes anteriores, que he estado estudiando, quisiera saber EN QUE PARTE del codigo es en donde el dato Blob (la foto) se guarda a la base de datos, pues veo (eso si) la parte donde se guarda la extension del archivo (.bmp o .jpg) a su columna, mas no veo el codigo que corresponde a cuando se almacena el campo BLOB a la base de datos.

Solicito alquien me lo indique, y de faltar, alguien lo complete, por favor!

El codigo (pego aqui) es el del mensaje anterior "cargar foto":

Código:
[delphi]
//cargar foto
procedure TFDatos.Cargarfoto1Click(Sender: TObject);
var
  m, f: TStream;
  s: string;
begin
  //se abre picturedialog para cargar fichero foto que se coja
  if dlgOpenPicture.Execute then
    begin
      //modo edición
      DM.IBDSAlumnos.Edit;
      //stream a partir campo Blob que contendrá la imagen
      m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmWrite);
      //stream para acceder al archivo gráfico
      f:= TFileStream.Create(dlgOpenPicture.filename, fmOpenRead);
      //copiar de un stream a otro
      m.CopyFrom(f, f.Size);
      //coger formato foto y ponerlo en campo correspondiente
      s:= AnsiUpperCase(ExtractFileExt(dlgOpenPicture.FileName));
      if s='.JPEG' then
        s:= '.JPG';
      DM.IBDSAlumnosFORMATOFOTO.AsString:= Copy(s,2,3);
      DM.IBDSAlumnos.Post;
      //destruir streams
      f.Free;
      m.Free;
    end
end;
Muchas gracias!
  #4  
Antiguo 21-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
Tema Cerrado



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como quitar las barras del Explorer??? danytorres HTML, Javascript y otros 24 21-10-2005 11:49:57
Ayuda para un navegador por correo!! Rolando Batista Internet 0 22-02-2005 17:13:29
Mi recopilacion de exageraciones DarkByte Humor 5 29-06-2004 10:32:47
como hago para mostrar un elemento especifico de TListView? carlos007 Varios 3 17-08-2003 21:54:36
Ingenieros obiwuan Humor 0 04-05-2003 12:55:50


La franja horaria es GMT +2. Ahora son las 16:06:59.


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