我能否以与处理中的尺寸不同的分辨率保存草图?
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 数字绘画系统的实践中看到这个概念:
我需要打印我的草图之一,为此我需要以高分辨率保存它。至少 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 数字绘画系统的实践中看到这个概念: