处理:网络摄像头保存和播放错误

处理:网络摄像头保存和播放错误

问题描述:

我应该超越这个,但我不能深究这个错误的底部。我试图写一个草图,记录我的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; 
} 

} 

看起来像这是由于相机馈源总是分配给每个单独的图像。为了获得“当前”视频流帧的“副本”,我只是将.get()添加到提要中,以便提取像素并将它们存储在PImage变量中。

currentImages.add(cam.get());