上下文:处理v3; Windows 10
我有一个853x2048像素的图像,我想在屏幕上显示全尺寸。它的很大一部分将从底部消失。我想使用Processing在图像内部导航,像运动路径一样,在某些点暂停,还可以放大和缩小。
以下代码改编自Robot类的演示,因为我认为这将是在图像内部移动的过程。
此代码有效,但我还无法弄清楚如何移动视口。然后是缩放问题(我还没有解决。)
如何移动鼠标以使图像移动或如何相对于视口移动图像?
//
// 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();
}
答案 0 :(得分:1)
我对你在Robot
课程中的表现感到有些困惑。
但无论如何,基本上你想要做的是绘制图像,使其Y值更低,这将导致图像上升,这样你就可以看到更多。这是一个小例子:
PImage img;
float imageY = 0;
void setup() {
img = loadImage("bigpic.jpg");
}
void draw() {
image(img, 0, imageY);
imageY--;
}
只需将更多参数传递给image()
函数,您就可以通过调整大小来执行类似操作。
但听起来你正在寻找的是转换功能。有关详细信息,请参阅https://gitweb.torproject.org/stem.git/的转换部分,但基本上您可以调用translate()
函数来移动原点。您也可以将scale()
功能调用为"缩放"进出。
这是一个围绕矩形而不是图像移动的小例子:
void setup(){
size(500, 500);
}
void draw(){
background(64);
translate(-mouseX, -mouseY);
rect(0, 0, width, height);
}
别忘了Processing附带了大量的例子。在Processing编辑器中,转到File > Examples
。