我想saveFrame()
用来记录使用 controlp5 创建的 controlWindow 中的帧。默认情况下saveFrame()
只记录草图的主窗口。有没有办法指定saveFrame()
从哪个窗口拉出?
有没有其他方法可以提取每帧绘制到 controlWindow 的缓冲区?
我想saveFrame()
用来记录使用 controlp5 创建的 controlWindow 中的帧。默认情况下saveFrame()
只记录草图的主窗口。有没有办法指定saveFrame()
从哪个窗口拉出?
有没有其他方法可以提取每帧绘制到 controlWindow 的缓冲区?
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");
高温高压
PApplet.saveImage()
本质上是一个包装器PImage.save()
。如果您只想捕获屏幕的一部分,则应将其渲染为 aPImage()
然后调用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");