我想使用saveFrame()
来记录使用controlp5创建的controlWindow中的帧。默认情况下,saveFrame()
仅记录草图的主窗口。
有没有办法指定哪个窗口saveFrame()
拉出来?
是否有其他方法可以提取每帧抽取到controlWindow的缓冲区?
答案 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");