Bonjour J'essaie d'obtenir la valeur rgb des coordonnées d'un clic dans un panneau de défilement qui affiche 5 vues d'une image. Les ImageView
s sont ajustés à la taille de l'écran tandis que l'image originale est d'environ 8k par 4k pixels. Ci-dessous est ma tentative de trouver le RGB mais je reçois systématiquement une exception de fichier d'entrée Can not read malgré le fait que j'ai utilisé cette image avant. Il est sans doute aussi pertinent de noter I ont un mécanicien de zoom mis en œuvre avec le total de zoom représenté par SCALE_TOTAL
Obtention des coordonnées de noeud d'un événement et lecture de RGB à partir de BufferedImage Javafx
Le code de clic
mapScroll.addEventFilter(MouseEvent.MOUSE_CLICKED, e -> {
File mapFile = new File("WorldProvincialMap-v1.01.png");
commandOutput.setText(commandOutput.getText() + " \n" + e.getSceneX() + " " + e.getSceneY());
try {
BufferedImage mapBuffered = ImageIO.read(mapFile);
int rgb = 0;
if(mapScroll.getHvalue() < 0.2)
{
rgb = mapBuffered.getRGB((int) (e.getSceneX()/SCALE_TOTAL), (int)(e.getSceneY()/SCALE_TOTAL));
}
else if(mapScroll.getHvalue() >= 0.2 && mapScroll.getHvalue() < 0.4)
{
rgb = mapBuffered.getRGB((int) (e.getSceneX()/(2/SCALE_TOTAL)), (int) (e.getSceneY()/(2/SCALE_TOTAL)));
}
else if(mapScroll.getHvalue() >= 0.4 && mapScroll.getHvalue() < 0.6)
{
rgb = mapBuffered.getRGB((int) (e.getSceneX()/(3/SCALE_TOTAL)), (int) (e.getSceneY()/(3/SCALE_TOTAL)));
}
else if(mapScroll.getHvalue() >= 0.6 && mapScroll.getHvalue() < 0.8)
{
rgb = mapBuffered.getRGB((int) (e.getSceneX()/(4/SCALE_TOTAL)), (int) (e.getSceneY()/(4/SCALE_TOTAL)));
}
else if(mapScroll.getHvalue() >= 0.8 && mapScroll.getHvalue() < 1);
{
rgb = mapBuffered.getRGB((int) (e.getSceneX()/(5/SCALE_TOTAL)), (int) (e.getSceneY()/(5/SCALE_TOTAL)));
}
commandOutput.setText(commandOutput.getText() + " \n" + Integer.toString(rgb));
} catch (IOException e1) {
e1.printStackTrace();
commandOutput.setText(commandOutput.getText() + " \n" + e1.getMessage());
}
});
Stack Trace
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)
at gameaspects.SourceCodeVersion9.lambda$5(SourceCodeVersion9.java:208)
at com.sun.javafx.event.CompositeEventHandler$NormalEventFilterRecord.handleCapturingEvent(CompositeEventHandler.java:282)
at com.sun.javafx.event.CompositeEventHandler.dispatchCapturingEvent(CompositeEventHandler.java:98)
at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:223)
at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:180)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchCapturingEvent(CompositeEventDispatcher.java:43)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:52)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Unknown Source)
ScrollPane
Image mapImage = new Image("WorldProvincialMap-v1.01.png");
//Sets the map to full screen
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = gd.getDisplayMode().getWidth();
int height = gd.getDisplayMode().getHeight();
//Creating the gridPane
GridPane mapGrid = new GridPane();
//Creating the image views
ImageView mapView1 = new ImageView(mapImage);
ImageView mapView2 = new ImageView(mapImage);
ImageView mapView3 = new ImageView(mapImage);
ImageView mapView4 = new ImageView(mapImage);
ImageView mapView5 = new ImageView(mapImage);
//Fitting the image views to the screen size.
mapView1.setFitHeight(height);
mapView1.setFitWidth(width);
mapView2.setFitHeight(height);
mapView2.setFitWidth(width);
mapView3.setFitHeight(height);
mapView3.setFitWidth(width);
mapView4.setFitHeight(height);
mapView4.setFitWidth(width);
mapView5.setFitHeight(height);
mapView5.setFitWidth(width);
//Adding the imageViews to the girdPane
mapGrid.add(mapView1,0,0);
mapGrid.add(mapView2, 1, 0);
mapGrid.add(mapView3, 2, 0);
mapGrid.add(mapView4, 3, 0);
mapGrid.add(mapView5, 4, 0);
mapGrid.setManaged(false);
mapScroll.setContent(new Group(mapGrid));
mapScroll.setPannable(true);
//Removes the ScrollBars
mapScroll.setVbarPolicy(ScrollBarPolicy.NEVER);
mapScroll.setHbarPolicy(ScrollBarPolicy.NEVER);
Cela a supprimé l'erreur, mais je reçois le même Argb d'où je clique même si c'est probablement dû à ma formule. Je vais accepter une fois que je répare la formule puisque c'est probablement le problème. –