Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-06-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 234
Poder: 19
WHILENOTEOF Va camino a la fama
Yo creo que no es necesario que calcules las posición donde dibujar el bitmap en el canvas del grid (TileX_Pos y TileY_Pos), porque con el scroll esa posición para una celda determinada cambiará a nivel global, utiliza el parámetro del dibujado de la celda Rect:

Código Delphi [-]
 dgMAP.Canvas.Draw(Rect.X,Rect.Y,bmp);
Responder Con Cita
  #2  
Antiguo 04-06-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 234
Poder: 19
WHILENOTEOF Va camino a la fama
(Corrijo mensaje anterior que no me deja editarlo, es Left y Top de Rect). Yo creo que no es necesario que calcules las posición donde dibujar el bitmap en el canvas del grid (TileX_Pos y TileY_Pos), porque con el scroll esa posición para una celda determinada cambiará a nivel global, utiliza el parámetro del dibujado de la celda Rect:

Código Delphi [-]
 dgMAP.Canvas.Draw(Rect.Left,Rect.Y.Top,bmp);
Responder Con Cita
  #3  
Antiguo 04-06-2019
acprincipi acprincipi is offline
Registrado
 
Registrado: jun 2019
Posts: 4
Poder: 0
acprincipi Va por buen camino
Muchas gracias WHILENOTEOF quedo solucionado.
Siguiendo con el tema de slippy map:

Quería consultar si es necesario liberar la memoria asignada cada vez que pintamos un bmp y al desplazarnos con el scroll éste queda fuera del área de visión:

Código Delphi [-]
procedure TfrmOSMSlippyMap.dgMAPDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create();

  Try
    //Cargo del directorio de bmps la imagen correspondiente a la celda que se esta dibujando actualmente.
    //Los directorios que almacenan las imágenes que forman cada mapa (según el nivel de zoom) cumplen con las especificaciones de OpenStreetMap (Slippy MAP - wiki.openstreetmap.org/wiki/Slippy_map_tilenames)
    bmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'Datos\'+inttostr(cbZoomLevel.ItemIndex)+'\'+i  nttostr(ACol)+'\'+inttostr(ARow)+'.bmp');

    dgMAP.Canvas.Draw(Rect.Left ,Rect.Top , bmp);
  finally
    bmp.Free;//<-- ¿Esto libera la memoria asignada al bmp cada vez que el mismo queda fuera de la porción de la grilla que estamos visualizando?
  end;
end;

Considerando que para un mapa de nivel de zoom 9 tendremos una grilla constituida de (512x512) celdas [ (2^9)x(2^9) ], es decir un total de 262144 bmps.

¿Cual sería la mejor manera de administrar los bmp que se cargaron en una celda que ya no esta visible por habernos desplazado a otro lugar de la grilla o mapa?
Responder Con Cita
  #4  
Antiguo 04-06-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 234
Poder: 19
WHILENOTEOF Va camino a la fama
Yo creo que para hacer eso es que te calcules cuantos bmp te caben en la pantalla donde lo estés visualizando, y crees una lista de bitmaps con esa cantidad. Primero capturas los movimientos de scroll para saber en que posición estás respecto al mapa global de bitmaps (obviamente no se pueden cargar todos), cargas en la lista los que no tengas y liberas los que ya no te hacen falta, puede que haya varios que no necesites volver a cargar, simplemente que su posición cambia. Lo que pasa que ahí tendrás que prevenir varias cosas como que se ponga a pintar con el draw cell uno que no hayas cargado todavía, por lo tanto primero chequear que ya lo tengas cargado, y si no pintas en blanco y en cuanto esté lo dibujo. Imagino que para esto habría que crear unos threads que te hicieran el proceso de cargas y liberar bitmaps.
Responder Con Cita
  #5  
Antiguo 04-06-2019
acprincipi acprincipi is offline
Registrado
 
Registrado: jun 2019
Posts: 4
Poder: 0
acprincipi Va por buen camino
Excelente razonamiento WHILENOTEOF. Veré como lo implemento. Por ahora estoy haciendo algunas pruebas, pero en algún momento tendré que ponerme con ese tema. Nuevamente gracias por el aporte. He conseguido mostrar hasta 4 niveles de zoom si problemas. Ahora estoy viendo como referenciar/ubicar coordenadas de Latitud y Longitud en el Mapa/Grilla.
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
Manejo de celdas individuales en TDrawGrid protector2020 Gráficos 1 07-05-2008 17:19:49
Problemas con tDrawGrid klaar OOP 1 28-01-2007 16:37:35
TDrawGrid jrgarlok C++ Builder 0 09-03-2005 16:04:21
Mover las filas de un TDrawGrid jrgarlok C++ Builder 0 17-02-2005 21:04:52
Mover Filas en un TDrawGrid jrgarlok Gráficos 0 24-01-2005 10:37:57


La franja horaria es GMT +2. Ahora son las 21:07:07.


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