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

Processing 处理,controlp5-使用saveFrame()记录controlp5 ControlWindow,processing,Processing,我想使用saveFrame()从使用controlp5创建的controlWindow录制帧。默认情况下,saveFrame()仅记录草图的主窗口。 是否有方法指定从哪个窗口提取saveFrame() 是否有其他方法可以提取每帧绘制到controlWindow的缓冲区?Java中的窗口通常是可用的。我还没有测试过,但你应该可以这样做: import java.awt.Component; import java.awt.image.BufferedImage; //get to the java

我想使用
saveFrame()
从使用controlp5创建的controlWindow录制帧。默认情况下,
saveFrame()
仅记录草图的主窗口。 是否有方法指定从哪个窗口提取
saveFrame()


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

Java中的窗口通常是可用的。我还没有测试过,但你应该可以这样做:

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

PApplet.saveImage()
本质上是对
PImage.save()的包装。
如果只想捕获屏幕的一部分,则应将其渲染到
PImage()
,然后调用
PImage.save()
<但是,code>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");
PImage屏幕抓图=createImage(controlWindow.width、controlWindow.height、RGB);
screengrab.loadPixels();
loadPixels();
对于(int i=0;i