2017-10-10 15 views
0

私はこれを超えなければなりませんが、このエラーの最下部には到達できません。私は私のMacカメラのフィードを記録し、各録音 "セッション"をPImage配列に保存するスケッチを作成しようとしており、それをセッションのリスト(PImage [] ArrayList)に追加します。私は 'Replay'クラスを使用してメモリに保存された画像にアクセスし、ランダムな位置で再生します。以下のコードは、IDEに直接コピーする準備ができているはずです。処理中:ウェブカメラの保存と再生のバグ

ご協力いただければ幸いです。リプレイオブジェクトが常にライブイメージを表示する理由はわかりません。ありがとう!

import processing.video.*; 
Capture cam; 

ArrayList<PImage[]> allImages; 
ArrayList<PImage> currentImages; 
ArrayList<Replay> replays; 

boolean recording = false; 
boolean finishedSaving = true; 
int currentIndex = 0; 

void setup() { 
    size(1056, 704, P2D); 
    frameRate(30); 

    allImages = new ArrayList<PImage[]>(); 
    currentImages = new ArrayList<PImage>(); 
    replays = new ArrayList<Replay>(); 

    String[] cams = Capture.list(); 
    if (cams.length == 0) { 
    println("No cams!"); 
    exit(); 
    } else { 
    cam = new Capture(this, 1056, 704, cams[0], 30); 
    cam.start(); 
    } 

} 

void draw() { 
    background(0); 

    if (cam.available() == true) { 
    cam.read(); 
    } 


    for (Replay r : replays) { 
    r.display(); 
    } 

    if (recording) { 
    currentImages.add(cam); 
    noFill(); 
    stroke(255, 0, 0); 
    strokeWeight(5); 
    rect(0, 0, cam.width/3, cam.height/3); 
    } else { 
    saveToArray(); 
    } 

    image(cam, 0, 0, cam.width/3, cam.height/3); 

} 

void saveToArray() { 
    if (!finishedSaving) { 
    PImage[] tempImages = currentImages.toArray(new PImage[currentImages.size()]); 
    allImages.add(tempImages); 
    currentImages.clear(); 
    println("Finished saving to allImages array"); 
    println("allImages array size now = " + allImages.size()); 

    replays.add(new Replay(currentIndex)); 
    println("Added new Replay (index: " + currentIndex + ")"); 
    currentIndex++; 
    finishedSaving = true; 
    println(); 
    } 

} 

void keyPressed() { 
    if (key == 'r' || key == 'R') { 
    recording = !recording; 
    println("Recording: " + recording); 
    finishedSaving = false; 
    } 
} 

class Replay { 

    PVector position; 
    float w, h; 
    PImage[] images; 
    int count; 

Replay(int allImagesIndex) { 
    w = cam.width/3; 
    h = cam.height/3; 
    position = new PVector(random(width-w), random(height-h)); 
    count = 1; 
    images = allImages.get(allImagesIndex); 
} 

void display() { 
    image(images[count], position.x, position.y, w, h); 
    count++; 
    if (count > images.length-1) count = 1; 
} 

} 

答えて

1

このように見えるのは、カメラのフィードが常に個々の画像に割り当てられているためです。 「現在の」ビデオストリームフレームの「コピー」を取得するために、フィードに.get()を追加して、ピクセルを取得してPImage変数に格納するようにしました。

currentImages.add(cam.get()); 
関連する問題