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 20-05-2007
dfarias dfarias is offline
Miembro
 
Registrado: abr 2007
Posts: 79
Poder: 18
dfarias Va por buen camino
Imagenes en memoria

Tengo un grupo de 12 paneles en los cuales quiero mostrar 12 imagenes por vez. Avanzando o retrocediendo quiero cambiar las imagens de estos. Como puedo primero leer las 200 imagens y guardales en memoria y luego ir refrescando el contenido visual.

Quiero evitar leer desde el disco cada vez.

Código Delphi [-]
For i:=1 to 12 do begin 

Img := TImage(Self.FindComponent('Img' + IntToStr(i))); 
img.Picture.LoadFromFile( '\GRAPHICS\foto1.jpg'); 
img.OnClick := Self.BotonClick; 
img.Tag := i-1 + inicio;

Muchas gracias.

Última edición por dec fecha: 20-05-2007 a las 23:43:33.
Responder Con Cita
  #2  
Antiguo 21-05-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
una forma sencilla es usando Streams (por ejemplo TMemoryStream) entonces en vez de usar LoadFromFile puedes usar LoadFromStream
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 21-05-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Leer las 200 imagenes para luego mostrarlas de a grupos es muy ineficiente.
Lo ideal es leer de a grupos.

Yo lo veo así: necesitas dos botones (al menos): Uno para adelantar y otro para retroceder el grupo.

Si tus imágenes están guardadas en un mismo directorio y siguen una misma nomeclatura (foto1, foto2, ... foto200), puedes valerte de una mejor técnica: Almacenar dicho valor en un resourcestring:

Código Delphi [-]
resourcestring
  DIR_IMG = '\GRAPHICS\foto%d.jpg';

El %d se sustituirá por el valor 1, 2,... 200. De modo que con pasar el número correspondiente se forma el directorio completo. De este modo abrir una imagen resulta más sencillo abrir una imagen:

Código Delphi [-]
Img.Picture.LoadFromFile(Format(DIR_IMG,[i]));

Ahora, como dije... lo ideal es abrir por grupos. Con un simple "truco" podemos hacer corresponder a cada grupo de imagenes con un numero. Algo como esto:

0: Imagenes 1 al 12
1: Imágenes 13 al 24

Entonces, ahora sólo se requiere de un procedimiento que lea este valor representativo y que abra dichas imagenes del grupo. A este procedimiento lo llamas desde los botones adelante y atras. Cada vez que presiones el botón "adelante" o siguiente, incrementas el valor del grupo:

Código Delphi [-]
inc(Grupo);
MostrarImagenes(Grupo);

Y la inversa, para el otro botón:
Código Delphi [-]
dec(Grupo);
MostrarImagenes(Grupo);

El procedimiento común (MostrarImagenes lo que hará es mostrar las imágenes...

Código Delphi [-]
for j := 1 to 12 do
  begin
    // localizar el TImage correspondiente:
    Img := TImage(FindComponent('Img' + IntToStr(j)));
    // Abrir la imagen si existe
   if FileExists(Format(DIR_IMG,[Grupo + j]))
      then Img.Picture.LoadFromFile(Format(DIR_IMG,[Grupo + j]));
  end;

Espero que se entienda. No probé el código, lo puse de memoria... pero creo que puede servirte.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 21-05-2007 a las 01:40:51.
Responder Con Cita
  #4  
Antiguo 21-05-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por dfarias
Como puedo primero leer las 200 imagens y guardales en memoria y luego ir refrescando el contenido visual.
También puedes utilizar un TStringList (FileName + TJPegImage), Leerlas todas al principio y luego ir accediendo a la lista; De todas formas el sistema no me acaba de convencer.
Habría que tener en cuenta de qué tipo/tamaño estamos hablando.
¿Puedes especificar un poco más? ¿es obligatorio cargarlas TODAS en memoria?

Piensa que el consumo puede ser muy grande...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Liberar memoria Perrero80 Varios 15 06-04-2017 04:07:10
Memoria Gandazgul Varios 2 08-05-2004 01:02:37
Liberar memoria de un QR. mlara Impresión 1 21-02-2004 18:31:16
Memoria susje Varios 18 23-07-2003 00:07:10


La franja horaria es GMT +2. Ahora son las 20:41:22.


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