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 25-05-2006
alain alain is offline
Registrado
 
Registrado: may 2006
Posts: 8
Poder: 0
alain Va por buen camino
Unir imagenes jpg

Hola, hace rato que estoy buscando una forma de hacer esto y realmente no encuentro manera de hacerlo.
Lo que necesito es formar una sola imagen (una tira) a partir de varias imagenes jpg (pueden ser muchas, y grandes, hasta 15 megas), osea, unir varias imagenes colocando una bajo la otra, y luego obviamente, guardarla en un archivo jpg separado.

Disculpen mi ignoracia pero soy nuevo trabajando con imagenes en delphi.
Desde ya, muchas gracias.


Salu2!
Responder Con Cita
  #2  
Antiguo 25-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Una posible solucion puede ser esta, una funcion que concatena todas las imagenes jpg de un directorio en un tira:

Código Delphi [-]
uses JPEG;

function Max(i,j: Integer): Integer;
begin
  if i > j then
    Result:= i
  else
    Result:= j;
end;

procedure Concatenar(Destino, Origen: TGraphic);
var
  Bitmap: TBitmap;
begin
  Bitmap:= TBitmap.Create;
  try
    Bitmap.Width:= Max(Origen.Width, Destino.Width);
    Bitmap.Height:= Origen.Height + Destino.Height;
    Bitmap.Canvas.Draw(0,0,Origen);
    Bitmap.Canvas.Draw(0,Origen.Height,Destino);
    Destino.Assign(Bitmap);
  finally
    Bitmap.Free;
  end;
end;


// Directorio es el directorio con las imagenes
// y Resultado el archivo jpg donde se guarda la tira
procedure HacerTira(Directorio: string; Resultado: string);
var
  SR: TSearchRec;
  Tira: TBitmap;
  Temp: TJPEGImage;
begin
  Tira:= TBItmap.Create;
  Temp:= TJPEGImage.Create;
  try
    if Copy(Directorio, Length(Directorio), 1) = '\' then
      Delete(Directorio, Length(Directorio), 1);
    if FindFirst(Directorio + '\*.jp*', faAnyfile, SR) = 0 then
    repeat
      Temp.LoadFromFile(Directorio + '\' + SR.Name);
      Concatenar(Tira,Temp);
    until FindNext(SR) <> 0;
    FindClose(SR);
    Temp.Assign(Tira);
    Temp.SaveToFile(Resultado);
  finally
    Tira.Free;
    Temp.Free;
  end;
end;

Aunque hice algunas pruebas y se queda sin memoria bastante rapido si las imagenes son muchas y grandes . Pero puede que te sirva para tener algunas ideas.

Última edición por seoane fecha: 25-05-2006 a las 13:23:30.
Responder Con Cita
  #3  
Antiguo 25-05-2006
alain alain is offline
Registrado
 
Registrado: may 2006
Posts: 8
Poder: 0
alain Va por buen camino
seoane, muchas gracias por responder. Probe tu solucion y me funciona perfecto, pero con imagenes de no mas de 1 mega. Si son mas grandes me salta un "EOutOfResources: espacio de almacenamiento insuficiente para procesar este comando". El error me lo tira en la 3° o 4° vez que intenta hacer el

Código Delphi [-]
Bitmap.Height:= Origen.Height + Destino.Height;


Estoy buscando la forma de hacer algo parecido a lo que me pasaste pero sin cargarlo en memoria ya que son extremadamente grandes (de 10 megas para arriba..) las imagenes con las q estoy trabajando.
Todavia no encontre una manera de hacerlo, asi que si se te ocurre como hacerlo, o a alguien de por aca, realmente se lo voy a agradecer.
Gracias nuevamente.

Salu2!

Última edición por alain fecha: 25-05-2006 a las 19:15:45.
Responder Con Cita
  #4  
Antiguo 25-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
La limitacion viene impuesta por el propio delphi que no puede manejar imagenes tan grandes, tendras que utilizar algun componente de terceros para tratar las imagenes.

Si me permites la pregunta, ¿para que quieres unas imagenes de ese tamaño? a lo mejor si nos cuentas para que lo necesitas te podemos dar una solucion alternativa.
Responder Con Cita
  #5  
Antiguo 25-05-2006
alain alain is offline
Registrado
 
Registrado: may 2006
Posts: 8
Poder: 0
alain Va por buen camino
Es q estoy desarrollando un sistema para un negocio, y uno de los requisitos es eso, a partir de n imagenes formar una sola, luego con la imagen resultante ellos hacen no se q cosa. Son fotografias q sacan con camaras profesionales, y a maxima resolucion, por eso son tan grandes.
Ahora mismo estoy por probar con "ImageMagick" y un componente para delphi (PascalMagick), q supuestamente permiten trabajar con imagenes muy grandes.
Bueno, gracias por tu ayuda seoane, si logro hacerlo funcionar despues lo comento por aca.

Saludos!!
Responder Con Cita
  #6  
Antiguo 28-06-2006
alain alain is offline
Registrado
 
Registrado: may 2006
Posts: 8
Poder: 0
alain Va por buen camino
solucion

Hola gente, simplemente queria comentar como resolvi esto de las limitaciones con los tamaños de las imagenes. Me pase de jpg a png, osea cargo imagenes jpg, las paso a un bitmap, y de ahi las acoplo a la imagen "grande" png. No tuve ni un tipo de limitaciones usando png, ya genere imagenes de cerca de 60.000 x 4.000 pixels mas o menos, asi q de lujo
Uso el componente pngimage http://pngdelphi.sourceforge.net/
Y nada mas, despues para pasar a jpg probe llamando desde delphi a un programa para consola q se llama png2jpg, y me las convirtio sin problemas a las imagenes grandotas.
Bueno, espero q les sea util
Salu2!
Responder Con Cita
  #7  
Antiguo 09-04-2008
Avatar de mrnovice
mrnovice mrnovice is offline
Miembro
 
Registrado: oct 2006
Posts: 163
Poder: 18
mrnovice Va por buen camino
EOutOfResources

Cita:
Empezado por alain Ver Mensaje
Hola gente, simplemente queria comentar como resolvi esto de las limitaciones con los tamaños de las imagenes. Me pase de jpg a png, osea cargo imagenes jpg, las paso a un bitmap, y de ahi las acoplo a la imagen "grande" png. No tuve ni un tipo de limitaciones usando png, ya genere imagenes de cerca de 60.000 x 4.000 pixels mas o menos, asi q de lujo
Uso el componente pngimage http://pngdelphi.sourceforge.net/
Y nada mas, despues para pasar a jpg probe llamando desde delphi a un programa para consola q se llama png2jpg, y me las convirtio sin problemas a las imagenes grandotas.
Bueno, espero q les sea util
Salu2!
saludos hola yo tengo el problema de EOutOfResources quiero acoplarlo a un JvThumbview el problema conmigo es que tengo muchas imagenes grandes de 2480 x 3507 pix y me tira ese error con ese componente pero con las chiquitas si funciona,usaste un componente tercero verdad y lo transformaste a png verdad, pero la duda es que si al final los dejabas como jpeg y ya no te tira el error? saludos y gracias
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Unir dos DBgrids Nbull Conexión con bases de datos 2 02-02-2006 09:19:00
Unir tres qry alcides SQL 6 11-07-2005 17:34:33
Unir Columnas vtdeleon SQL 4 15-06-2005 00:34:49
unir tablas Mario1980 Conexión con bases de datos 8 22-10-2004 10:36:45
unir db grids piyugo Varios 3 29-08-2004 23:54:50


La franja horaria es GMT +2. Ahora son las 13:41:26.


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