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 17-09-2014
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Obtener nombre de archivo de imagen

Hola amigos:

Estoy utilizando el siguiente código, modificado del que ha publicado Neftalí, para visualizar miniaturas de imágenes.
Los nombres de archivo de las imágenes se cargan en un ImageList (TStringList), seleccionando una carpeta del disco duro.

Código Delphi [-]
procedure TFormPrincipal.CreateImages(ImageList: TStringList);
var
Image:TImage;
I:Integer;
begin
ScrollBox1.Width:= 180 * ImageList.Count;
for I := 0 to (ImageList.Count- 1) do begin
Image:= TImage.Create(nil);
Image.Parent:= ScrollBox1;
Image.Height:= 180;
Image.Width:= 180;
Image.Top:= 10;
Image.Left:= ((Image.Width + 8) * I);
Image.Transparent:= true;
Image.Align:= alLeft;
Image.Stretch:= True;
Image.Proportional:= True;
Image.IncrementalDisplay:= True;
Image.Center:= True;
Image.Picture.LoadFromFile(ImageList[i]);
Image.OnClick := ClickImage;
ObjectList.Add(Image);
ScrollBox1.Refresh;
end;
end;

Funciona sin problemas y las imágenes se ven perfectas en un TImage, con el siguiente código:

Código Delphi [-]
procedure TFormPrincipal.ClickImage(Sender: TObject);
begin
Image1.Bitmap.Assign(TImage(Sender).Picture);
end;

Necesito sin embargo, poder obtener el nombre del archivo de la imagen seleccionada, en un Label o Edit, al hacer click sobre la miniatura, para acceder a su metadata utilizando la librería CCR Exif.

Agradezco su valiosa ayuda
Saludos
Responder Con Cita
  #2  
Antiguo 17-09-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Puedes utilizar la propiedad Tag del TImage para guardar el número de imagen del ImageList.
Todos los componentes tienen esta propiedad.

Sería algo así:
Código Delphi [-]
procedure TFormPrincipal.CreateImages(ImageList: TStringList);
var
Image:TImage;
I:Integer;
begin
  ScrollBox1.Width:= 180 * ImageList.Count;
  for I := 0 to (ImageList.Count- 1) do begin
    Image:= TImage.Create(nil);
    Image.Parent:= ScrollBox1;
    Image.Height:= 180;
    Image.Width:= 180;
    Image.Top:= 10;
    Image.Left:= ((Image.Width + 8) * I);
    Image.Transparent:= true;
    Image.Align:= alLeft;
    Image.Stretch:= True;
    Image.Proportional:= True;
    Image.IncrementalDisplay:= True;
    Image.Center:= True;
    Image.Tag := I; // Aquí guardo el índice del ImageList
    Image.Picture.LoadFromFile(ImageList[i]);
    Image.OnClick := ClickImage;
    ObjectList.Add(Image);
    ScrollBox1.Refresh;
  end;
end;

procedure TFormPrincipal.ClickImage(Sender: TObject);
begin
  Image1.Bitmap.Assign(TImage(Sender).Picture);
  ShowMessage('El nombre del archivo es: ' + ImageList[Image.Tag]);
end;
Responder Con Cita
  #3  
Antiguo 17-09-2014
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias por responder [duilioisola].

Usé el código que incluiste, pero selecciona el último archivo de imagen del ImageList y no el que debiera al hacer click en la miniatura.
Debí sin embargo declarar en private Image:TImage, porque si no aparece como no declarado el [Image.Tag] y si lo incorporo como variable en el ClickImage da un access violation.
Saludos y muchas gracias
Responder Con Cita
  #4  
Antiguo 17-09-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Si, no me di cuenta de tomar la imagen que está siendo clicada.
Sender, es la imagen, por lo tanto TImage(Sender).Tag te devolverá el Tag de esa imagen.
NO DEBES INCLUIR IMAGE EN LA DECLARACION PRIVATE.
El procedimiento ClickImage quedaría así:
Código Delphi [-]
procedure TFormPrincipal.ClickImage(Sender: TObject);
begin
  Image1.Bitmap.Assign(TImage(Sender).Picture);
  ShowMessage('El nombre del archivo es: ' + ImageList[TImage(Sender).Tag]);
end;
Responder Con Cita
  #5  
Antiguo 17-09-2014
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias [duilioisola].
Me alegraste el día. Funcionó perfecto.
Ya que de esta manera, con este código puedo obtener las coordenadas GPS de la imagen.

Código Delphi [-]
procedure TFormPrincipal.ClickImage(Sender: TObject);
var
ExifData: TExifData;
begin
Image1.Bitmap.Assign(TImage(Sender).Picture);
Image2.Bitmap.Assign(TImage(Sender).Picture);
Edit1.Text:= ImageList[TImage(Sender).Tag];
ExifData := TExifData.Create;
try
ExifData.LoadFromGraphic(Edit1.Text);
Label1.Caption:= 'Latitud: ' + ExifData.GPSLatitude.ToString + ' / Longitud: '+ ExifData.GPSLongitude.ToString;
finally
ExifData.Free;
end;
end;

Sólo me falta transformar las coordenadas geográficas a formato decimal para mostrar en un mapa dónde se tomó la fotografía.

Un abrazo
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
obtener ubicación y nombre de imagen lmpadron C++ Builder 3 24-10-2011 19:51:53
Obtener el nombre de la pc jocey Varios 3 02-09-2008 15:24:37
Obtener el nombre de una imagen sonjeux Gráficos 2 29-08-2008 00:00:59
nombre del archivo de la imagen ingel Gráficos 1 15-05-2008 15:20:54
Obtener nombre del PC Gabo Trucos 0 28-11-2007 13:37:24


La franja horaria es GMT +2. Ahora son las 17:09:55.


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