Обработка, controlp5 - Использование saveFrame () для записи controlp5 ControlWindow

Я хотел бы использовать saveFrame() для записи кадров из окна controlWindow, созданного с помощью controlp5. По умолчанию saveFrame() записывает только главное окно скетча. Есть ли способ указать, из какого окна saveFrame() тянется?

Есть ли альтернативные способы извлечения буфера, отображаемого в controlWindow в каждом кадре?


person user1472893    schedule 19.07.2012    source источник


Ответы (2)


Windows в Java обычно представляет собой 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

person George Profenza    schedule 20.07.2012

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");
person ericsoco    schedule 27.07.2012