Ver Mensaje Individual
  #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
Reputación: 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