Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-05-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 19
radenf Va por buen camino
Solucionado

Después de muchos intentos y pruebas fallidas descubrí que la CnsDMTable carga las imágenes usando threads sobre un MemoryStream, mediante los parámetros AKeepStream y ALoadFrameinThread, es decir el componente, según entiendo viene desarrollado para cargar las imágenes a la máxima velocidad que permita el PC.
Utilizando el siguiente código logré acelerar la carga de las imágenes a escasos segundos en series grandes de más de 1000 imágenes:

Código Delphi [-]
procedure TVisor.ButtonCargarClick(Sender: TObject);
var
I:Integer;
c1: TCursor;
begin
c1 := Screen.Cursor;
Screen.Cursor := crHourGlass;
CnsDMTable1.Create(Self); // crea la tabla (este paso es fundamental)
ListBox1.Items.Clear;
FindFile.Threaded := False;
with FindFile.Criteria.Files do
begin
FileName := '*.dcm';
Location := (DBEditDir.Text); // Directorio donde se almacenan los archivos de imágenes, ruta guardada en la BD
Subfolders := Self.Subfolders.Checked;
end;
begin
FindFile.Execute;// Extrae la ruta de los archivos de imágenes y los muestra en un ListBox
Application.ProcessMessages;
end;
begin
for I := 0 to (ListBox1.Items.Count - 1) do
CnsDMTable1.LoadfromFile(ListBox1.Items.Strings [i]);// carga las imágenes
Application.ProcessMessages;
try
DicomMultiViewer1.DicomDatasets:= CnsDMTable1;// carga los visores
DicomMultiViewer2.DicomDatasets:= CnsDMTable1;
DicomMultiViewer3.DicomDatasets:= CnsDMTable1;
DicomMultiViewer4.DicomDatasets:= CnsDMTable1;
DicomMultiViewer5.DicomDatasets:= CnsDMTable1;
DcmMultiImage1.DicomDatasets:= CnsDMTable1;
finally
if assigned(DicomMultiViewer1.DicomDatasets) and (DicomMultiViewer1.DicomDatasets.Count > 0) then
begin
DicomMultiViewer1.ActiveView.Attributes.ImageData.MagnificationType:= mftCUBIC;// asigna propiedades
DicomMultiViewer2.ActiveView.Attributes.ImageData.MagnificationType:= mftCUBIC;
DicomMultiViewer2.LeftMouseInteract:= miZoom;
DicomMultiViewer1.LeftMouseInteract:= miZoom;
Screen.Cursor := c1;
end;
end;
end;
end;

y para llamarlo:

Código Delphi [-]
procedure TVisor.DBAdvGrid1ClickCell(Sender: TObject; ARow, ACol: Integer);
begin
if (ACol = 2) then
begin
CnsDMTable1.Clear;// esto vacía la tabla y libera la memoria
ButtonCargar.ButtonClick;
end;

y de este modo ya no tengo violaciones de acceso a memoria y el programa corre sin problemas.
FindFile es un componente que permite obtener la ruta de todos los archivos existentes en un directorio, incluidos los subdirectorios y cargarlos como strings en un ListBox. Para 1000 archivos tarda 180 msegs.
Espero que a alguien más le pueda servir.

Saludos y gracias por sus aportes
Responder Con Cita
  #2  
Antiguo 03-05-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 19
radenf Va por buen camino
Cronometré los tiempos y se demora aproximadamente 3.8 msegs. en cargar cada imagen, permitiendo que un estudio de 1000 imágenes se encuentre disponible para visualización y proceso en 3.8 segundos. Un examen de cerebro habitualmente posee 350 a 400 imágenes y lo carga en 1 - 1.3 segundos.
Esto con un procesador Intel Xeon de 3.2 Ghz. utilizando sólo 1 de los núcleos, con un consumo de memoria menor de 300 Mb.
Estos resultados me parecen excelentes y satisfacen plenamente mi necesidad.
salu2
Responder Con Cita
  #3  
Antiguo 03-05-2013
jmvene jmvene is offline
Miembro
NULL
 
Registrado: abr 2013
Ubicación: Sevilla
Posts: 11
Poder: 0
jmvene Va por buen camino
En hora buena Radenf, esos valores son excelentes. Creo que tienes un pequeño error en el código, ya que la llamada de las CnsDMTable1 deberia ser:
Código Delphi [-]
CnsDMTable1.LoadFromFile(ListBox1.Items[i], True, True);

Un abrazo.
Responder Con Cita
  #4  
Antiguo 03-05-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 19
radenf Va por buen camino
Cita:
Empezado por jmvene Ver Mensaje
En hora buena Radenf, esos valores son excelentes. Creo que tienes un pequeño error en el código, ya que la llamada de las CnsDMTable1 deberia ser:
Código Delphi [-]
CnsDMTable1.LoadFromFile(ListBox1.Items[i], True, True);

Un abrazo.
Muchas gracias por tu aporte.
Al parecer esos valores los toma por defecto, porque sin ellos no daba problemas de compilación y al agregarlos no cambió ni la velocidad de carga ni el porcentaje de uso del procesador.
En todo caso me parece mejor incluirlos.
Saludos
Responder Con Cita
  #5  
Antiguo 03-05-2013
jmvene jmvene is offline
Miembro
NULL
 
Registrado: abr 2013
Ubicación: Sevilla
Posts: 11
Poder: 0
jmvene Va por buen camino
Hola Radenf de nuevo,

acabo de probar el codigo y no hay diferencia entre usarlos o no... En principio el procedimiento tienes esos parámetros como opcionales con valor a False (lo puedes ver cuando te sale el hint del metodo en el IDE). De verdad, estos componentes estan llenos de "sorpresas" y lo de jiawen no tiene nombre.

Voy a hacer una prueba a ponerlos a false a ver si hay difrencia.

Un abrazo.
Responder Con Cita
  #6  
Antiguo 03-05-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.678
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por radenf Ver Mensaje
Estos resultados me parecen excelentes y satisfacen plenamente mi necesidad.

.................
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
WebBrowser bloqueo de carga de imagenes titomigue Internet 1 17-08-2010 09:53:34
Acelerar apertura de consulta desde Delphi contra Access Sergiov SQL 4 13-04-2007 10:42:59
Acelerar carga de Delphi mamcx Noticias 4 13-09-2006 00:51:52
Transparencias y carga de imágenes david.rguez Gráficos 1 04-09-2006 18:01:40
carga de imagenes en timage jvalles Gráficos 2 15-12-2005 19:06:57


La franja horaria es GMT +2. Ahora son las 14:32:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi