2017-08-16 5 views
1

Langue: Java FXZoomer plusieurs images à la fois javafx

L'objectif est de faire fonctionner le zoom (zoom numérique et zoom). Par zoom de tuile, je veux dire charger le prochain jeu d'images correspondant à la zone qui est agrandie.

S'il vous plaît aider ::: Expérience en Java FX est très limitée, trouver où il est très difficile de procéder

1. J'ai une mise en œuvre pour zooming qui est rien, mais en mettant la fenêtre pour la vue de l'image.

Appelons ce zoom numérique

imageView.setViewport(new Rectangle2D(x, y, width, height)); 

2. Une autre mise en œuvre de zooming est à la demande de zoom, prochaine série d'images seront chargées qui représente en fait le zoomée région.

Appelons cette tuile zoom

for (int xNavigation = xWindowStart; xNavigation <= xWindowEnd; xNavigation++) { 
       for (int yNavigation = yWindowStart; yNavigation <= yWindowEnd; yNavigation++) { 
        count++; 
        try { 
         image1 = new Image(new FileInputStream(
           Constants.PATH_TILL_FOLDER + tileZoom + "/" + xNavigation + "_" + yNavigation + Constants.FILE_EXTESNION 
         )); 
         ImageView imageView1 = new ImageView(); 
//      System.out.println("Zoom levels::::" + tileZoom); 
         imageView1.setX(xval); 
         imageView1.setY(yval); 

         imageView1.setFitHeight(image1.getHeight() * digitalZoomLevel); 
         imageView1.setFitWidth(image1.getWidth() * digitalZoomLevel); 
         imageView1.setPreserveRatio(true); 
         imageView1.setImage(image1); 

         root.getChildren().add(imageView1); 
         //System.out.println("X"+imageView1.getX()); 
         //System.out.println("Y"+imageView1.getY()); 

         yval = yval + image1.getHeight() ; 

//      System.out.println("Going to paint image :" + xNavigation + "-" + yNavigation); 

        } catch (FileNotFoundException ex) { 
         Logger.getLogger(DataZoom.class.getName()).log(Level.SEVERE, null, ex); 
        } 

       } 
       yval = 0; 
       xval = xval + image1.getWidth(); 

      } 
      System.out.println("Number of images painted tile" + count); 
      System.out.println("Tile Zoom"); 

Mon problème est la première solution est développée pour soutenir 1 image uniquement. Comment vais-je gérer le zoom numérique pour plusieurs images ???

Pourquoi zoomer plusieurs images? Ex: image de monalisa par un ensemble d'images.

Répondre

0

Je ne sais pas si j'ai bien compris votre problème. Pourquoi voudriez-vous zoomer sur plusieurs images à la fois? De toute façon, si vous voulez faire cela, vous devrez soit utiliser des threads, ce qui pourrait causer des problèmes avec la façon dont vous chargez l'image.

Ou vous pourriez "faire semblant" d'être multithread en mettant à jour l'image par petites étapes et après chaque étape faire la même chose avec une autre image. Dans ce cas, vous auriez besoin d'une boucle supplémentaire qui fait ce travail pour vous. Maintenant, si vous ne voulez zoomer que sur une image à la fois mais que vous avez plusieurs images à l'intérieur de votre fenêtre, le problème est assez facile à résoudre. Vous avez juste besoin d'implémenter quelle image a actuellement le focus dessus.

+0

. Ex: image de monalisa par un ensemble d'images. Et maintenant je dois zoomer comme une seule image – Gerrard

+1

Très bien, c'est assez difficile. Vous auriez besoin de créer un algorithme qui calcule une nouvelle position pour chaque image une fois que vous zoomez et sortez. Le calcul n'est pas le vrai problème mais l'optimisation de ce processus va prendre un certain temps –

+0

exactement homme, je me demandais s'il n'y a pas de solution facile ;-) – Gerrard