Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-04-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Transiciones bruscas en pantalla

Hola amigos.
Estoy intentando hacer zoom con una imagen.

Y me encuentro un problema que me lleva ya unos 15 días y que no soy capaz de resolver.
Tengo una imagen que está incluída en un TScrollBox, que a su vez pertenece a un TPanel.

Hago zoom con un gesturemanager sobre la imagen y utilizo la cualidad de desplazarse con las ScrollBars del Scrolbox en los 4 sentidos del los ejes X e Y.

La cosa funciona... REGULAR...

Me explico: los desplazamientos y el zoom se realizan, pero en la pantalla del dispositivo van como a GOLPES. Entre una imagen y la siguiente no se realiza una transición homogénea.

Quiero decir que (p.e.) al hacer zoom, se ve crecer o disminuir el tamaño bruscamente.

He visto los ejemplos proporcionados por Embarcadero llamados "ImageZoom" y "HorizontalScroll", los he compilado e instalado en el dispositivo y las transiciones entre las imágenes son mucho más homogéneas.

No consigo entender por qué. Cuando utilizo estas funciones en otros programas instalados en el dispositivo, como leer el periódico en la web (p.e.) las transiciones son mucho más progresivas.

No sé si existe algún truco o tengo que resignarme...

Por favor, si alguien tiene información al respecto, agradecería la compartiera conmigo. Gracias.

Saludos.
Responder Con Cita
  #2  
Antiguo 06-04-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Dices que los ejemplos que incluye Embarcadero funcionan más suavemente. ¿Las has comparado con tu código, a ver qué diferencias hay?

De todas formas, y adivinando, aquí te dejo algunas pistas que podrían ayudar (o no).

Por lo que dices, la construcción en capas de lo que se muestra en pantalla es así:
Código:
  TForm
    TPanel
      TScrollBox
        TImage
Cada vez que tiene que actualizar la pantalla, se llama al método Draw de TForm, que llama al método Draw de TPanel, que llama al método Draw de TScrollBox, que llama al método Draw de TImage.

Además, cada vez que dibuja el TImage hace una interpolación para el zoom, comprobando también los límites dentro de TScrollBox, que comprueba los límites también en el TPanel (aunque no sé si con alineación al área cliente optimiza algo). Y aún queda el tema de que TImage almacena la imagen completa, sin pérdida ni adaptándola al dispositivo (número de colores, tamaño, etc.), por lo que es posible que deba hacerse alguna conversión cada vez que se dibuja. Dependiendo de la implementación de los componentes (que desconozco) es posible que muchas de estas comprobaciones, interpolaciones y conversiones las haga por cada pixel de forma independiente. Si es así, normal que vaya a saltos, ya que cada parte hay que multiplicarla por el número de píxels de la imagen.

Para realizar animaciones complejas, te recomiendo dos opciones:
  1. Buscar un componente específico que haga dicha animación, ya que suele optimizar el proceso. Posiblemente es lo que hacen en los ejemplos de Embarcadero (no los he visto, así que estoy adivinando).
  2. Hacer tú el trabajo, usando como "lienzo" un componente óptimo para mostrar gráficos rápidamente. Por ejemplo, un componente que use OpenGL (OpenGL ES, en este caso concreto).
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 06-04-2016 a las 19:44:18.
Responder Con Cita
  #3  
Antiguo 06-04-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias Ñuño.
Tienes toda la razón con los niveles. Ya lo había pensado, porque los ejemplos de Embarcadero son unos programas pequeñitos que solo tienen el Form y la imagen el que hace zoom y el Form, un HorizontalScrollBox y 4 TImage el que hace desplazamiento horizontal.

He copiado el código, que tiene alguna instrucción menos que el mío, pero no hay diferencia significativa.

He sacado el TImage de su anclaje, para ponerlo directamente en el form y tampoco hay diferencia. He llegado a la conclusión de que es posible que influya el peso total del programa.

No se como funciona OpenGL, nunca lo he utilizado.

Gracias de nuevo. Seguiré investigando.

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
formato de pantalla gallet API de Windows 39 04-11-2008 14:40:29
Capturar Pantalla = Pantalla negra DarkDudae Gráficos 8 27-10-2008 12:29:36
resolucion de pantalla rtorioa OOP 5 26-09-2005 19:18:52
Capturar pantalla pablo Varios 1 07-09-2004 20:15:10
Imágenes y Transiciones yusnerqui Gráficos 9 03-05-2004 14:01:42


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


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