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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-06-2011
ingmichel ingmichel is offline
Miembro
 
Registrado: jun 2007
Posts: 137
Poder: 17
ingmichel Va por buen camino
leer imagenes jpg dentro de una carpeta

hola amigos del foro como estan, estoy realizando un sistema de digitalizacion y requiero leer n imaganes con formato .jpg que se encuentran en una carpeta determinada carpeta en mi formulario delphi, para leer una imagen no tengo problemas, pero lo que requiero es leer todas las imagenes que contenga la carpeta, por favor si alguien ha hecho algo parecido le agradeceria mucho su ayuda.

gracias de antemano...
Responder Con Cita
  #2  
Antiguo 01-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ingmichel.

Para leer los archivos .JPG te podés valer de las funciones FindFirst y FindNext. Como supongo que querrás almacener la ruta y el nombre de cada imágen,
creo que usar un TStrings es lo indicado.

Código Delphi [-]
...
uses JPeg, ExtCtrls;

procedure LeerJPGS(const Ruta: string; Nombres: TStrings);
var
  SR: TSearchRec;
begin
  if FindFirst(Ruta+'\*.JPG',faArchive, SR) = 0 then
  begin
    repeat
      Nombres.Add(Ruta+'\'+SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

Y para ponerte un ejemplo que sea funcional, uso un TScrollBox donde voy a hubicar las imágenes cuyos nombres están almacenados en la variable
de tipo TStrings.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Nombres: TStrings;
  Img: TImage;
  i: Integer;
begin
  Nombres:= TStringList.Create;
  try
    LeerJPGS('C:\Users\Tu_Nombre_De_Usuario\Pictures',Nombres);
    for i:= 0 to Nombres.Count -1 do
    begin
      Img:= TImage.Create(Self);
      Img.Picture.LoadFromFile(Nombres[i]);
      Img.Height:= 150;
      Img.Width:= 300;
      Img.Top:= i * 150 + 10;
      Img.Stretch:= True;
      Img.Parent:=ScrollBox1;
    end;
  finally
    Nombres.Free;
  end;
end;
Al finalizar, también deberías eliminar los TImage que se han creado.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 01-06-2011
ingmichel ingmichel is offline
Miembro
 
Registrado: jun 2007
Posts: 137
Poder: 17
ingmichel Va por buen camino
muchisimas gracias ecfisa

hola ecfisa muchisimas gracias por tu respuesta, me haz salvado la vida, probe tu codigo y funciono perfecto, solo una inquietud como elimino los timage que se crean con el bucle ?
Responder Con Cita
  #4  
Antiguo 01-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ingmichel.

Una forma podría ser mediante un TObjectList:
Código Delphi [-]
...

uses JPeg, ExtCtrls, Contnrs;

var
  ObjList: TObjectList;

...

procedure TForm1.btnCargarImagenesClick(Sender: TObject);
var
  Nombres: TStrings;
  Img: TImage;
  i: Integer;
begin
  if not Assigned(ObjList) then
  begin
    ObjList:= TObjectList.Create;
    Nombres:= TStringList.Create;
    try
      LeerJPGS('C:\Users\Oz\Pictures',Nombres);
      for i:= 0 to Nombres.Count -1 do
      begin
        Img:= TImage.Create(Self);
        ObjList.Add(Img);
        with TImage(ObjList[i]) do
        begin
          Picture.LoadFromFile(Nombres[i]);
          Height:= 150;
          Width:= 300;
          Top:= i * 150 + 10;
          Stretch:= True;
          Parent:= ScrollBox1;
        end;     
      end;
    finally
      Nombres.Free;
    end;
  end;
end;

...

procedure TForm1.btnLiberarImagenesClick(Sender: TObject);
begin
  if Assigned(ObjList) then
    ObjList.Free;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 01-06-2011 a las 06:38:31. Razón: Remarcar relevantes en negrita
Responder Con Cita
  #5  
Antiguo 01-06-2011
ingmichel ingmichel is offline
Miembro
 
Registrado: jun 2007
Posts: 137
Poder: 17
ingmichel Va por buen camino
gracias

muchas gracias ecfisa por tu respuesta. dios te bendiga.


saludos.
Responder Con Cita
  #6  
Antiguo 03-06-2011
ingmichel ingmichel is offline
Miembro
 
Registrado: jun 2007
Posts: 137
Poder: 17
ingmichel Va por buen camino
saludos ecfisa

saludos ecfisa como estas, espero que bien. bueno la razon de este mensaje es que tengo un pequeño inconveniente, resulta que me pidieron que las imagenes no se muestren todas de una sola vez, si no que se muestren una por una y tener dos botones(Siguiente y anterior) para ir navegando por las imagenes, mi duda es, como puedo modificar el codigo k me facilitaste para lograrlo ? y ademas que el componente timage adopte el ancho y el alto de la imagen que se esta leyendo ?

por favor ayudame...

gracias de antemano.
Responder Con Cita
  #7  
Antiguo 04-06-2011
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 21
rrf Va por buen camino
Hola.

Aunque no estoy seguro, creo que la forma en la que lo resolvió ecfisa no servirá para las nuevas condiciones que has añadido en tu consulta.

Te propongo una estrategia alternativa utilizando un TFileListBox, 2 botones, 1 TOpenPictureDialog y 1 TImage.

Este es el código. Lo he probado en Delphi 7 y va bien. Creo que resuelve todas las condiciones que necesitas.

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs, FileCtrl, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    FileListBox1: TFileListBox;
    OpenPictureDialog1: TOpenPictureDialog;
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
                       
  Posicion : Integer ;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin

  if OpenPictureDialog1.Execute then
  begin
    FileListBox1.Directory := ExtractFilePath( OpenPictureDialog1.FileName ) ;
    FileListBox1.Mask := '*.jpg' ;
    FileListBox1.Update ;

    Image1.Picture.LoadFromFile( FileListBox1.Items [0] );
    Posicion := 0 ;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  if Sender = Button1
    then Posicion := Posicion -1    // Button1 ---> Imagen anterior
    else Posicion := Posicion +1 ;  // Button2 ---> Imagen siguiente

  if Posicion < 0                  // Evita exceder límites
    then Posicion := 0 ;
  if Posicion > FileListBox1.Items.Count -1
    then Posicion := FileListBox1.Items.Count -1 ;

  Image1.Picture.LoadFromFile( FileListBox1.Items [ posicion ] );

  Image1.Width :=  Image1.Picture.Width ;       // Ajusta ancho y alto
  Image1.Height := Image1.Picture.Height ;

end;

end.

Usé el TOpenPictureDialog porque supuse que era posible que la carpeta con los archivos JPG puede ser cambiar.

En el TFileListBox, le pones Visible en False para que no lo vean los usuarios.

Espero que te sirva.

Saludos

Última edición por rrf fecha: 04-06-2011 a las 18:15:15. Razón: añadir comentario
Responder Con Cita
  #8  
Antiguo 04-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra alternativa es cargar todas las imágenes de una carpeta en algun punto de tu código e ir mostrándolas.
En el código de ejemplo que te adjunto se cargan de forma fija en el evento OnShow, pero podrías elegir la carpeta por otro medio.
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ExtCtrls, Contnrs;

type
  TForm1 = class(TForm)
    Image1: TImage;
    btSiguiente: TButton;
    btAnterior: TButton;
    procedure FormShow(Sender: TObject);
    procedure btSiguienteClick(Sender: TObject);
    procedure btAnteriorClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    FPtr: Integer;  // Apuntador a imágen actual
    FObjLst: TObjectList;
    procedure LeerJPGS(const Ruta: string);
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}


uses JPeg;

procedure TForm1.LeerJPGS(const Ruta: string);
var
  SR: TSearchRec;
  Img: TImage;
begin
  if FindFirst(Ruta+'\*.JPG',faArchive, SR) = 0 then
  begin
    repeat
      Img:= TImage.Create(Self);
      Img.Picture.LoadFromFile(Ruta+'\'+SR.Name);
      FObjLst.Add(Img);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  FPtr:= 0;  
  FObjLst:= TObjectList.Create;
  LeerJPGS('C:\Users\Usuario\Pictures');
  Image1.Stretch:= True;
  Image1.Picture:= TImage(FObjLst.Items[FPtr]).Picture; // mostrar 1ra
end;

procedure TForm1.btSiguienteClick(Sender: TObject);
begin
  if FPtr < FObjLst.Count then Inc(FPtr);
  Image1.Picture:= TImage(FObjLst.Items[FPtr]).Picture;
  
end;

procedure TForm1.btAnteriorClick(Sender: TObject);
begin
  if FPtr > 0 then Dec(FPtr);
  Image1.Picture:= TImage(FObjLst.Items[FPtr]).Picture;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(FObjLst) then
    FObjLst.Free;
  Action:= caFree;
end;

end.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 04-06-2011 a las 19:33:49.
Responder Con Cita
  #9  
Antiguo 06-06-2011
ingmichel ingmichel is offline
Miembro
 
Registrado: jun 2007
Posts: 137
Poder: 17
ingmichel Va por buen camino
muchas gracias

muchas gracias colegas por su ayuda, les comento que esta tarde investigando un poco en google encontre un componente llamado TImageen que es mucho mas potente que el Ttimage nativo de delphi, utilizando la funcion leerimagen de ecfisa para cargar las imagenes, el control tImage en view las carga tal cual yo lo requero y en uno de los ejemplos del componente me presenta las opciones de navegacion asi como tambien que las imagenes se carguen con su tamaño original, no se si ustedes estan de acuerdo con el uso de componentes de terceros pero veo k este me ha facilitado la vida, bueno muchas gracias y cualquier cosa vuelvo otra vez con mis dudas.

saludos.
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
Leer todos los ficheros de una carpeta VRO Varios 9 14-12-2021 11:26:27
Borrar archivos dentro de carpeta ØnLy Varios 1 23-11-2010 06:36:55
Leer o modificar los permisos de una carpeta radge API de Windows 1 04-06-2010 16:47:03
listar archivos jpg dentro de una carpeta con subcarpetas JuanErasmo API de Windows 6 06-12-2006 22:52:49
adjuntar el archivo que esta dentro una carpeta kinteam1 Internet 1 11-10-2005 22:32:01


La franja horaria es GMT +2. Ahora son las 16:00:15.


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