在大于屏幕的图像内移动

时间:2017-05-12 03:38:37

标签: processing

上下文:处理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();
}

1 个答案:

答案 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