0

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

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

4

2 回答 2

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");

高温高压

于 2012-07-20T15:54:11.537 回答
0

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");
于 2012-07-27T00:40:24.363 回答