2017-05-12 14 views
0

コンテキスト:処理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

@KevinWorkman、私たちは最後に全く別の道をたどって終わりました。私たちは、Webページを呼び出し、キーを使用して、プレゼンテーション手法として、定義済みの場所に移動したり、ズームイン/ズームアウトしたりできます。最初にPhantomJSを使用してフルサイズのスクリーンショットを撮った後、Processing Navigateを使用することを考えました。私たちはブラウザでjavascriptで終わった。 – bugmagnet

答えて

1

私はあなたがRobotクラスでやっていることで少し混乱しています。

しかし、いずれにしても、基本的にはY値が低くなるように画像を描画するので、画像が上がり、それ以上見ることができます。ここで小さな例です:

PImage img; 
float imageY = 0; 

void setup() { 
    img = loadImage("bigpic.jpg"); 
} 

void draw() { 
    image(img, 0, imageY); 
    imageY--; 
} 

あなただけimage()関数に複数のパラメータを渡すことによって、リサイズと似た何かを行うことができます。

しかし、あなたが本当に求めているのは、変換関数です。詳細は変換セクションのthe Processing referenceを参照してください。基本的にtranslate()関数を呼び出して原点を移動します。また、scale()関数を呼び出して「ズーム」することもできます。ここで

ではなく、画像の長方形の周りに移動少し例を示します

void setup(){ 
    size(500, 500); 
} 

void draw(){ 
    background(64); 
    translate(-mouseX, -mouseY); 
    rect(0, 0, width, height); 
} 

は、処理は例のトンが付属していることを忘れないでください。 ProcessingエディタでFile > Examplesに移動します。

関連する問題