Buenas,

Estoy haciendo algunas pruebas para cambiar la forma de renderizar las imágenes 
y tengo un problema con el que llevo varios días sin conseguir detectar cual es 
el error.
Os comento: En el MapControl se tiene el método "public boolean draw(boolean 
doClear)" que se encarga de renderizar las distintas capas a través de otro 
método de la clase MapContext. La forma de renderizar las capas es secuencial 
de forma que hasta que no se completa la carga de todas las capas no se muestra 
la imagen final. Yo estoy intentando que la renderización de capas se haga de 
forma independiente para que a medida que se carga una capa se muestre en el 
visor. Para ello he creado una clase "Render" que se encarga de lanzar la 
renderización de cada capa en un hilo (Thread) independiente y a medida que 
terminan de pintarse se le muestra al usuario (con orden).
A esta clase "render" le paso el gráfico del MapControl para pintar las capas 
en este. 
Os adjunto la clase Render para que os hagáis una idea (es una clase muy 
simple). Para dar transparencia a la imagen base he hecho una chapuza que es 
cargar una imagen transparente al cargar la aplicación para no perder tiempo en 
cargar la imagen cada vez que se utiliza (pero sin más, eso no preocupa ahora).

El problema que tengo es que en PC funciona correctamente (a medida que se 
pintan las imágenes se les va mostrando al usuario) pero en móvil se cierra 
inesperadamente la máquina virtual y después de revisar el código (que es muy 
simple) no consigo entender por qué puede ser. Me imagino que tiene que estar 
relacionado con pintar en el gráfico del MapControl de forma "aleatoria" o 
mejor dicho "no de forma secuencial". 

Me interesa mucho resolver esto porque creo que mejora la visualización de los 
mapas ya que cuando hay varias capas se evita que el usuario tenga que esperar 
mucho para ver resultados.

EL método de la clase MapControl sería algo así:

public boolean draw(boolean doClear) 
{
        boolean do_something = (project.getMapContext().getLayerCount() > 0);

        if (true) {     clearCanvas();}
        if (do_something) 
        {
                setProcessing(true);
                //project.getMapContext().draw(mapGraphics, canc);
                draw(mapGraphics, canc);
        }
        return do_something;
}

public void draw(Graphics2D g,Cancellable canc)
{
        ViewPort viewPort = getViewPort(); 
        if (viewPort.getAdjustedExtent() == null) {return;}

        // IMPORTANTE: EL NUEVO RENDER
        Render render = new Render(g,viewPort,this);
      FLayer[] vls = getVisibleLayers();
      render.draw(vls, canc);
        
      System.gc();
}

public void setProcessing(boolean isSplashVisible, boolean notRedraw, 
Graphics2D g)
{
        processingSplash.setVisible(isSplashVisible);
        dontRedraw=notRedraw;
}

Siento enviaros toda esta chapa pero igual a alguien le interesa el tema ya que 
creo que mejora la visualización de mapas.

Un saludo.


Attachment: Render.java
Description: Render.java

_______________________________________________
gvSIG_desarrolladores mailing list
[email protected]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores

Responder a