Processing,controlp5 - 使用saveFrame()记录controlp5 ControlWindow

时间:2012-07-19 16:08:45

标签: processing

我想使用saveFrame()来记录使用controlp5创建的controlWindow中的帧。默认情况下,saveFrame()仅记录草图的主窗口。 有没有办法指定哪个窗口saveFrame()拉出来?

是否有其他方法可以提取每帧抽取到controlWindow的缓冲区?

2 个答案:

答案 0 :(得分:0)

Java中的Windows通常为JFrames。我没有测试过,但你应该可以这样做:

import java.awt.Component;
import java.awt.image.BufferedImage;
//get to the java.awt.Component
Component window = yourP5ControlWindow.component();
//make a BufferedImage to store pixels into
BufferedImage snapshot = new BufferedImage(window.getWidth(),window.getHeight(),BufferedImage.TYPE_INT_RGB);
//take a snapshot
window.paint( snapshot.getGraphics() );
//create a PImage out of the BufferedImage
PImage image = new PImage(snapshot);
//save,etc.
image.save("yourComponent.png");

HTH

答案 1 :(得分:0)

PApplet.saveImage()本质上是PImage.save()的包装器。 如果您只想捕获屏幕的一部分,则应将其呈现为PImage(),然后调用PImage.save()。但是,PImage.save()要求您指定自己的文件名 - 它不会像PApplet.saveImage()那样自动增加。

将ControlP5内容绘制到单独的缓冲区(PImage)中似乎并不简单,但您可以从主图形上下文中获取任意矩形并保存它。

PImage screengrab = createImage(controlWindow.width, controlWindow.height, RGB);
screengrab.loadPixels();
loadPixels();
for (int i=0; i<screengrab.width*screengrab.height; i++) {
    // loop thru pixels and copy into screengrab.pixels...
    // i'll leave the math here as a fun exercise for you.
}
screengrab.updatePixels();
updatePixels();
screengrab.save("screengrab.png");