我能否以与处理中的尺寸不同的分辨率保存草图?

Can I save a sketch in a different resolution than the size in processing?

我需要打印我的草图之一,为此我需要以高分辨率保存它。至少 5000px x 5000px。问题是我不能 运行 我的草图有那个尺寸。有什么办法可以用与草图不同的分辨率保存帧 size()

为了节省我正在使用:

void mousePressed(){
  save("myfile-"+hour()+""+minute()+""+second()+".tif");
}

如有任何提示,我们将不胜感激。 谢谢

选项 1:就像您现在所做的那样保存它们,然后在 Processing 之外缩放它们。您可以在 Windows 中执行此操作,只需右键单击并转到 "Resize pictures",或者您可以使用类似 ImageMagic 的内容。这样做的好处是根本不必更改您的草图,并且您可能能够使用更好的缩放算法来消除丑陋的调整大小伪影。

选项 2: 创建一个 PImage 与屏幕相同的大小。然后将 PImage 的像素设置为屏幕的像素。然后,您可以将该图像放大并保存。它可能看起来像这样:

void setup(){
  size(100, 100);
}

void draw(){
  background(0);
  ellipse(mouseX, mouseY, 20, 20);
}

void mousePressed(){
 PImage img = createImage(100, 100, RGB);
 img.set(0, 0, get());
 img.resize(1000, 1000);
 img.save("myfile-"+hour()+""+minute()+""+second()+".tif");
}

我建议看一下 Processing's pdf library 及其示例(处理 > 示例 > 库 > pdf)。 Bellow 是它附带的基本鼠标按下示例,稍作调整以调整为 5000x5000。

/**
 * Mouse Press. 
 * 
 * Saves one PDF of the contents of the display window 
 * each time the mouse is pressed.
 */


    import processing.pdf.*;

    boolean saveOneFrame = false;

    void setup() {
      size(500, 500);
      frameRate(24);
    }

    void draw() {
      if(saveOneFrame == true) {
        size(5000,5000);
        beginRecord(PDF, "Line.pdf"); 
      }

      background(255);
      stroke(0, 20);
      strokeWeight(20.0);
      line(mouseX, 0, width-mouseY, height);

      if(saveOneFrame == true) {
        endRecord();
        saveOneFrame = false;
        size(500,500); 
      }
    }

    void mousePressed() {
      saveOneFrame = true; 
    }

如果您每隔一段时间就保存一次,这应该可行。 矢量 PDF 应该比按比例放大的光栅图像更适合打印。 即使您将 PDF 文件保存为 500x500,以矢量格式您也可以放大而不会造成任何质量损失。

如果出于某种原因您需要保存非常大的打印件并且 运行 您的程序尽可能快,这会有点复杂,但并非不可能。 您可以将每个绘制命令序列化为单独线程中的一个文件(这样动画线程就不会断断续续)。然后可以在单独的程序中读取该文件,该程序简单地读取每条指令并将其呈现为大型 pdf。您可以在 Engine26 数字绘画系统的实践中看到这个概念: