Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Processing – Motion Photo Slider

Februar 29, 2012

Ein Imageslider der Bewegung gesteuert wird.

import processing.video.*;

// Variable for capture device
Capture video;

// Saved background
PImage backgroundImage, motionImage;
boolean haveBackgroundImage = false;
boolean showMotion = false;

Button buttonLeft, buttonRight;

Slider slider;

// How different must a pixel be to be a foreground pixel
float threshold = 100;

void setup() {
size(640, 480);
video = new Capture(this, 640, 480, 30);
backgroundImage = createImage(video.width, video.height, RGB);

motionImage = createImage(video.width, video.height, RGB);

buttonLeft = new Button(40, height/2-40, 80, false);
buttonRight = new Button(width-120, height/2-40, 80, true);

slider = new Slider(width/2-150,height/2-150,300,300);
int sliderItems = 7;

for(int i = 1; i <= sliderItems;i++) {
slider.addSlide(i+".jpg");
}
slider.setDefault();

smooth();
fill(255);
}

void draw() {
background(0);

// Capture video
if (video.available()) {
video.read();
}

video.loadPixels();
backgroundImage.loadPixels();
motionImage.loadPixels();

// Begin loop to walk through every pixel
for (int x = 0; x  0) {
fill(255, 200);
float s = map(constrain(timer,0,timerTarget), 0, timerTarget,0,w);
ellipse(x+w/2-s/2, y+w/2-s/2, s, s);
}
fill(0, 255);
if (t) {
triangle(x+w*1/3, y+w/4, x+w*1/3, y+w/4*3, x+w*3/4, y+w/2);
}
else {
triangle(x+w*2/3, y+w/4, x+w*2/3, y+w/4*3, x+w*1/4, y+w/2);
}
}
}

class Slide {
PImage img;
int w,h,x,y;
int targetX;
boolean isAnimated = false;

Slide(String fileName, int _w,int _h) {
img = loadImage(fileName);

float wRatio = 1;
float hRatio = 1;
if (img.width > _w || img.height > _h) {
wRatio = _w / float(img.width);
hRatio = _h / float(img.height);
}
float resizeRatio = min(wRatio, hRatio);
h = int(img.height * resizeRatio);
w= int(img.width * resizeRatio);
x = 0;
y = height/2-h/2;
}

void setTarget(int _x) {
targetX = _x;
isAnimated = true;
}

void setPos(int _x) {
x = _x;
}

void setPosnTarget(int _x1, int _x2) {
x = _x1;
targetX = _x2;
isAnimated = true;
}

void display() {
if(isAnimated) {
if(abs(targetX-x) > 10) {
x += (targetX-x)/5;
} else {
isAnimated = false;
}
}
image(img, x, y, w, h);
}
}

class Slider {

int x,y,w,h;

ArrayList slides;
int slideIndex;
int prevSliderIndex;

Slider(int _x, int _y, int _w, int _h) {
x = _x;
y = _y;
w = _w;
h = _h;

slides = new ArrayList();
slideIndex = 0;
}

void addSlide(String filename) {
slides.add(new Slide(filename,w,h));
}

void setDefault() {
slideIndex = 0;
Slide slide = (Slide) slides.get(slideIndex);
slide.setPos(int(x)+w/2-slide.w/2);
}

void nextSlide() {
prevSliderIndex = slideIndex;

slideIndex++;
if(slideIndex == slides.size()) {
slideIndex = 0;
}

Slide slide = (Slide) slides.get(slideIndex);
Slide slidePrev = (Slide) slides.get(prevSliderIndex);
slide.setPosnTarget(width+slide.w+50,int(x)+w/2-slide.w/2);
slidePrev.setTarget(0-slidePrev.w-50);
}

void prevSlide() {
prevSliderIndex = slideIndex;

slideIndex--;
if(slideIndex < 0) {
slideIndex = slides.size() - 1;
}

Slide slide = (Slide) slides.get(slideIndex);
Slide slidePrev = (Slide) slides.get(prevSliderIndex);
slidePrev.setTarget(width+slide.w+50);
slide.setPosnTarget(0-slidePrev.w-50,int(x)+w/2-slide.w/2);
}

void display() {
Slide slide = (Slide) slides.get(slideIndex);
Slide slidePrev = (Slide) slides.get(prevSliderIndex);
slide.display();
slidePrev.display();
}

}