Ir al contenido


Foto

convertir imagen JPG en BMP


  • Por favor identifícate para responder
3 respuestas en este tema

#1 diocles

diocles

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 19 enero 2015 - 10:36

Hola.
      Haber si me explico, utilizo el delphi 7 y tengo una campo en una base de datos longblob que almacena las imagenes en JPG (por supuesto no tengo esa imagen en el ordenador) y necesito parsar ese JPG a BMP y despues pasarlo a un TImage para verla en BMP.

Gracias.
  • -1

#2 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 19 enero 2015 - 11:02

Hola

pero, si usas la clase TJPG puedes abrir sin problema las imágenes sin necesidad de convertirlas de formato.

Saludos!!


  • 0

#3 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 19 enero 2015 - 12:13

Basicamente necesitaras dos TImage, uno tipo JPEG (por lo que necesitas hacer uses de la unidad jpeg) y otro TImage receptor.

El TImege jpeg lo creas y cargas el contenido del blob a un TMemoryStream, y desde aqui lo lees en el TImage.JPEG.LoadFromStrem (es de memoria), y una vez leido, lo copias al otro con:

ImagenVisible.Picture.Assign(ImagenPEG.Picture);

De nuevo es de memoria, no se si se copiaba el picture o el bitmap, cosas de la edad!

El ImagenJPEG si te da problemas al ir leyendo imagen tras imagen, te tocara hacerle un free y volverlo a crear cada vez, en D7 la unit jpeg va regular algunas veces.
  • 0

#4 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 mensajes
  • LocationCali, Colombia

Escrito 20 enero 2015 - 09:56

Hola

En ciertas oportunidades no se desea utilizar componentes visuales y se requiere hacer todo por código, y definitivamente Delphi 7 no tiene las ventajas que tienen las nuevas versiones de Delphi y mucho menos FireMonkey en el caso de los gráficos.

Si lo que quieres es cargar un JPG directamente desde un Stream el código sería mas o menos esto:

Asumiendo que ya tienes la imagen en un stream.




delphi
  1. Var
  2.   jp : TJPEGImage;
  3.   Bm : TBitMap;
  4. Begin
  5.         jp  := TJPEGImage.Create;
  6.         Bm := TBitMap.Create;
  7.  
  8.         Jp.LoadFromStream(Stream);
  9.         Bm.Assing(Jp);
  10. End;




Ya he realizado unas funciones en en Delphi 7 que detectan en un stream el tipo de imagen y luego otra que carga la imagen.

Función para detectar el tipo de imagen que hay en un stream.



delphi
  1. Function GetImageFormat(Stream : TStream) : String;
  2. Var
  3.   FirstBytes: AnsiString;
  4. begin
  5.   Result := '';
  6.   if (Stream <> nil) and (Stream.Size > 40) then
  7.   begin
  8.       try
  9.         SetLength(FirstBytes, 8);
  10.         Stream.Read(FirstBytes[1], 8);
  11.         if Copy(FirstBytes, 1, 2) = 'BM' then
  12.             Result := '.bmp'
  13.         else if FirstBytes = #137'PNG'#13#10#26#10 then
  14.             Result := '.png'
  15.         else if Copy(FirstBytes, 1, 3) = 'GIF' then
  16.             Result := '.gif'
  17.         else if Copy(FirstBytes, 1, 2) = #$FF#$D8 then
  18.             Result := '.jpg'
  19.         else if Copy(FirstBytes, 1, 3) = #$49#$49#$2A then
  20.             Result := '.tif'
  21.         else if Copy(FirstBytes, 1, 3) = #$0#$0#$01 then
  22.             Result := '.ico'
  23.       Finally
  24.       end;
  25.   end;
  26. End;



Función que se encarga de carga la imagen de un stream



delphi
  1. Function LoadGraphicFromStream(St : TStream) : TGraphic;
  2. var
  3.   jp  : TJPEGImage;  //Requires the "jpeg" unit added to "uses" clause.
  4.   bm  : TBitmap;
  5.   Mf  : TMetaFile;
  6.   Ic  : TIcon;
  7.   Gif  : TGIFImage;
  8.   png  : TPngImage;
  9.   Ext  : String;
  10. Begin
  11.   If Not Assigned(St) then
  12.       Raise Exception.create('El formato de Imágen no es válida');
  13.  
  14.   If St.Size < 40 then
  15.       Raise Exception.create('El formato de Imágen no es válida');
  16.  
  17.   Result := Nil;
  18.   St.Position := 0;
  19.  
  20.   Ext := AnsiLowerCase(GetImageFormat(St));
  21.  
  22.   If not ((ext = '.jpg') or (ext = '.jpeg') or (ext = '.bmp') or
  23.           (ext = '.ico') or (ext = '.emf')  or (ext = '.wmf') or
  24.           (ext = '.gif') or (ext = '.png')) then
  25.       Raise Exception.Create('El formato "'+Ext+'" del archivo no es soportado');
  26.  
  27.  
  28.   St.Position := 0;
  29.  
  30.   Try
  31.  
  32.     If (ext = '.jpg') or (ext = '.jpeg') then
  33.     Begin
  34.         jp  := TJPEGImage.Create;
  35.         Jp.LoadFromStream(St);
  36.         Result    := Jp;
  37.     End
  38.     Else
  39.     If (ext = '.gif') then
  40.     Begin
  41.         Gif  := TGIFImage.Create;
  42.         Gif.LoadFromStream(St);
  43.         Result := Gif;
  44.     End
  45.     Else
  46.     If (ext = '.png') then
  47.     Begin
  48.         Png  := TPngImage.Create;
  49.         Png.LoadFromStream(St);
  50.         Result  := Png;
  51.     End
  52.     Else
  53.     If (ext = '.ico') then
  54.     Begin
  55.         Ic  := TIcon.Create;
  56.         Ic.LoadFromStream(St);
  57.         Result    := Ic;
  58.     End
  59.     Else
  60.     If (ext = '.emf') or (ext = '.wmf') then
  61.     Begin
  62.         Mf  := TMetaFile.Create;
  63.         Mf.LoadFromStream(St);
  64.         Result := Mf;
  65.     End
  66.     Else
  67.     If (ext = '.bmp')  then
  68.     Begin
  69.         Bm := TBitMap.Create;
  70.         Bm.LoadFromStream(St);
  71.         Result    := Bm;
  72.     End
  73.     Else
  74.         Raise exception.create('El formato del archivo "'+Ext+'" no es soportado');
  75.  
  76.   Finally
  77.   End;
  78. End;



Espero sea de utilidad.


       



  • 0




IP.Board spam blocked by CleanTalk.