Contexte: Traitement v3; Windows 10Se déplacer dans une image plus grande que l'écran
J'ai une image de 853x2048 pixels que je veux afficher en taille réelle sur l'écran. Une grande partie disparaîtra du fond. Je veux utiliser Processing pour naviguer à l'intérieur de l'image, faire un mouvement, faire une pause à certains endroits et aussi zoomer et dézoomer.
Le code ci-dessous est adapté d'une démo de la classe Robot car je pensais que ce serait le moment de se déplacer à l'intérieur de l'image.
Ce code fonctionne mais je n'arrive pas encore à comprendre comment déplacer la fenêtre. Et puis il y a le problème du zoom (que je n'ai pas encore abordé.)
Comment déplacer la souris pour déplacer l'image ou comment déplacer l'image par rapport à la fenêtre d'affichage?
//
// how to use java.awt.Robot class in processing ...
//
import java.awt.*;
import java.awt.event.*;
Robot robot;
PFont pfont;
Point save_p;
PImage img;
void setup() {
try {
robot = new Robot();
robot.setAutoDelay(0);
}
catch (Exception e) {
e.printStackTrace();
}
surface.setResizable(true);
fullScreen();
img = loadImage("bigpic.jpg");
pfont = createFont("Impact", 32);
}
void draw() {
background(#ffffff);
fill(#000000);
imageMode(CORNERS);
image(img, 0, 0, 640*3, 480*8);
Point p = getGlobalMouseLocation();
textFont(pfont);
text("now x=" + (int)p.getX() + ", y=" + (int)p.getY(), 10, 32);
if (save_p != null) {
text("save x=" + (int)save_p.getX() + ", y=" + (int)save_p.getY(), 10, 64);
}
}
void keyPressed() {
switch(key) {
case 's':
save_p = getGlobalMouseLocation();
break;
case 'm':
if (save_p != null) {
mouseMove((int)save_p.getX(), (int)save_p.getY());
}
break;
case 'c':
break;
case 't':
translate(2000, 0);
break;
case ' ':
if (save_p != null) {
mouseMoveAndClick((int)save_p.getX(), (int)save_p.getY());
}
break;
}
}
Point getGlobalMouseLocation() {
// java.awt.MouseInfo
PointerInfo pointerInfo = MouseInfo.getPointerInfo();
Point p = pointerInfo.getLocation();
return p;
}
void mouseMove(int x, int y) {
robot.mouseMove(x, y);
}
void mouseMoveAndClick(int x, int y) {
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle();
}
@KevinWorkman, Nous avons fini par suivre un chemin complètement différent à la fin. Nous voulions être en mesure d'appeler une page Web, puis utiliser les touches pour naviguer vers des emplacements prédéfinis, zoom avant et arrière etc, comme technique de présentation. Nous avons tout d'abord pensé à utiliser PhantomJS pour prendre une capture d'écran en mode plein écran et avoir ensuite Processing en navigation. Nous nous sommes retrouvés avec javascript dans un navigateur. – bugmagnet