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 imagen bmp a jpeg (https://www.clubdelphi.com/foros/showthread.php?t=19846)

mar646 12-04-2005 09:14:21

¿La función BMP2JPG comprime una imagen en bmp a otra en jpeg?
¿Sabes si es más rápida que el assign de delphi?

Neftali [Germán.Estévez] 12-04-2005 09:28:50

Todas las versiones que he encontrado de BMP2JPG acaban utilizando el Assign, así que no creo que te sirva.

Código Delphi [-]
 ...
 MyJpeg.Assign(Image1.Picture.Bitmap);
 ...

o ésta:

Código Delphi [-]
 ...
       with MyJPEG do begin         
   Assign(MyBMP);         
   SaveToFile('YourJpegHere.JPEG');         
   Free;       
 end;

mar646 12-04-2005 09:52:52

Gracias Netfali. Bueno, todo esto me hace pensar que quizás la forma más rápida para comprimir sea la de utilizar el assign. ¿no creeis?

Si es así .... Bueno seguiré buscando una forma de acelerar esto.

Neftali [Germán.Estévez] 12-04-2005 15:32:32

Otra cosa, tal vez deberías mirar ésta librería (por probar no pierdes nada). Sabía que algo había visto y hasta hoy no he recordado donde (he buscado en los Bookmarks y lo he encontrado).

Graphics32: A fast graphics library for Delphi (ahoira ha pasado a SourceForge)
http://www.g32.org/graphics32/index.html

La descripción del paquete dice lo siguiente (hace mucho incapié en lo de "FAST", asó que tal vez te interese...):
Description

Graphics32 is a library designed for fast 32-bit graphics handling. Optimized for 32-bit pixel formats, it provides fast operations with pixels and graphic primitives, and in most cases Graphics32 outperforms the standard TBitmap/TCanvas classes. It is almost a hundred times faster in per-pixel access and about 2–5 times faster in drawing lines.

Features

Some of Graphics32 features include:

  • Fast per-pixel access up to 100 times faster compared to standard TCanvas/TBitmap;
  • Bitmap alpha blending (including per-pixel alpha blending);
  • Pixel, line and polygon antialiasing (combined with alpha blending);
  • Locking the bitmap for safe multithreading;
  • Enhanced scaling of bitmaps;
  • Affine transformations of bitmaps: rotations, scaling, etc. with sub-pixel accuracy;
  • Arbitrary projective transformations of bitmaps;
  • Flicker-free image displaying components with optimized double buffering;
  • Multiple customizable easy-to-use overlay layers;
  • A property editor for RGB and alpha channel loading;
  • Design-time loading of image formats supported by standard TPicture;

mar646 12-04-2005 17:45:50

Voy a probar a ver como va con estos componentes.

mar646 12-04-2005 18:09:55

Gracias netfali por tu ayuda pero no me sirven estos componentes. No disponen de compatibilidad con la clase TJpegImage por lo que no se como pasar un tbitmap a un tjpegimage.

Vamos que me conformo con pasar de un tbitmap a un tmemorystream pero que contenga la información comprimida. Lo que pretendo es reducir el tamaño de la imagen bmp que me llega de la cámara. Me da igual si la paso a jpeg o directamente a un tmemorystream pero comprimida con alguna función que me genere un archivo más pequeño.

Crandel 12-04-2005 18:21:41

perdon mar646, por ahi no me exprese bien.
La idea de la funcion que te pase tiene implementado un assign adentro.

Código:

function BMPtoJPG (BMPpic, JPGpic: string):boolean;
var
    Bitmap: TBitmap;
    JpegImg: TJpegImage;
begin
  Result:=False;
  Bitmap := TBitmap.Create;
  try
    Bitmap.LoadFromFile(BMPpic);
    JpegImg := TJpegImage.Create;
    try
      JpegImg.Assign(Bitmap);
      JpegImg.SaveToFile(JPGpic);
      Result:=True;
    finally
      JpegImg.Free
    end;
  finally
    Bitmap.Free
  end;
end;

Pero a lo que me referia, es a la creación de los dos objetos, porque los podes estar creando cada ves que realizas una conversion.
En el ejemplo anterior, se crean dos objetos, Bitmap y JpegImg, ademas tambien Bitmap carga la imagen desde disco.
Aca hay bastante desperdicio de tiempo que se puede acelerar.

Una es trabajando con variables globales para que no se creen y destruyan con cada conversion.
Por otro lado, caragar la imagen BMP desde memoria.

Espero que quede mas claro




Espero que se entienda.

mar646 13-04-2005 09:10:15

Ha quedado muy claro. Pero ya he tenido eso en cuenta. Bueno, la variable bitmap se crea y se destruye en cada paso (pero te aseguro que esto es inevitable porque lo hace internamente el objeto encargado de capturar la imagen del stream de video y es algo complicado de depurar, aunque le echaré otro vistazo) pero la jpeg si que la tengo de forma global.

De todas formas muchas gracias por tus sugerencias.


La franja horaria es GMT +2. Ahora son las 20:13:25.

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