Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Convertir Formatos Graficos (https://www.clubdelphi.com/foros/showthread.php?t=30585)

soloriv 10-04-2006 20:08:57

Convertir Formatos Graficos
 
Hola a todos

Para cargar a una tabla access un jpeg uso lo sgte

Código Delphi [-]
uses 
jpeg

var
bitmap:tbitmap
jpeggraf:tjpegimage
begin
bitmap:=tbitmap.create
jpeggraf:=tjpegimage.create
try
 if openpicturedialog.execute
 then  
       jpeggraf.loadfromfile(openpicturedialog.filename)
       bitmap.assign(jpeggraf)
       adotable.edit
       adotable.fields[x].assign(bitmap)
       adotable.post
finally  
  jpeggraf.free
  bitmap.free
end

lo hago asi por caracteristicas de tabla acces por eso convierto a bmp
ademas para poder usar dbimage. Esto funciona

Pero para trasportar estas imagenes a un componente hago lo siguiente:

Código Delphi [-]
var 
bitmap:tbitmap
jpeggraf:jpegimage
menst:tmemorystream

begin
bitmap:=tbitmap.create
jpeggraf:=tjpegimage.create
menst:=tmemorystream.create
try
 adotableimagen.savetostream(menst)
 bitmap.loadfromstream(menst)
 jpeggraf.assign(bitmap)
 image.picture.assign(jpeggraf)
finally
 jpeggraf.free
 bitmap.free
 menst.free
end

El Problema es que no sale la imagen en el comp. image, ademas si saco el bitmap y solo uso para esto jpeggraf y menst compila para en ejecucion me sale como error jpeg error #42.
Como solucionaria el problema de asignar si es posible a un componente tpaintbox y con formato jpeg los campos bmp de mi tabla acces
Saludos y Gracias Soloriv.

Kosmo 11-04-2006 09:12:58

no se cómo será el campo de la tabla access, pero supongo que será un BLOB.

Yo probaría a hacer un cast antes de salvarlo como stream.

Código Delphi [-]
TBlobField(adotableimagen).savetostream(menst)
 bitmap.loadfromstream(menst)
 jpeggraf.assign(bitmap)
 image.picture.assign(jpeggraf)

yo lo hice así, aunque yo guardo las fotos en la base de datos directamente en jpg.

soloriv 12-04-2006 02:12:33

Hola a todos
Gracias Kosmo por contestar pero aun asi no logro que la imagen salga en mi image. No se si hay alguna otra forma de hacerlo porque si no me vere obligado a trabajar solo con bmp.
Saludos Soloriv.

courtois 12-04-2006 18:18:11

Para cargar una imagen, ya sea jpeg o bmp, de preferencia jpeg, por el tamaño
Código Delphi [-]
   if DialogoAbrir.Execute then
   begin
     if (Tabla.State <> dsEdit) or (Tabla.State <> dsInsert) then Tabla.Edit;
     TablaCampoFoto.LoadFromFile(DialogoAbrir.FileName);
     Tabla.Post;
   end;
... de hecho esto carga cualquier cosa al campo :D

Para mostrarla en un TImage...

Código Delphi [-]
var  Jpeg:TJpegImage;
      JpegStream:TMemoryStream;
begin
   if TablaCampoFoto.IsNull then Imagen.Picture:=Nil
   else
   begin
     try
       Imagen.Picture.Assign(TablaCampoFoto); //esto funciona solo si es bmp
     except
        //pero si es jpeg...
        Jpeg:=TJpegImage.create;
        JpegStream:=TMemoryStream.create;
        try
          TablaCampoFoto.SaveToStream(JpegStream);
          //importante regresar?
          JpegStream.Seek(0,soFromBeginning);
          Jpeg.LoadFromStream(JpegStream);
          //Ahora si la mostramos
          Imagen.Picture.Assign(Jpeg);
        finally
          JpegStream.Free;
          Jpeg.Free;
        end;
     end;
   end;
end;

soloriv 17-04-2006 16:58:45

Gracias courtois por contestar el codigo funciona con algunos cambios por ej eliminando el primer try de todas formas ya localice y salve los errores
Saludos Soloriv.


La franja horaria es GMT +2. Ahora son las 20:03:01.

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