微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带加工的绘图工具

如何解决带加工的绘图工具

我正在尝试创建一个带有处理功能的小绘图工具。最终的绘图应该可以导出为 .svg 文件——所以我认为这很容易……但实际上它不是…… 我将背景功能放入设置中——为了能够绘制——不幸的是,安全的 svg 文件只包含一个框架——而不是整个绘图。 :-( 我错过了什么——我怎么能做到这一点!我会很感激任何形式的帮助!

这是我目前的代码

import processing.svg.*;

boolean record;



void setup () {
  size(1080,1080);
  background(255);
}

void draw() {
  if (record) {
    beginRecord(SVG,"frame-####.svg");
  }

  fill(255);
  strokeWeight(1);
  ellipse(mouseX,mouseY,100,100);
  if (record) {
    endRecord();
    record = false;
  }
}

void mousepressed() {
  record = true;
}

尝试了不同的方法以不同的顺序组织代码行 - 但无法管理它......

谢谢!

解决方法

那是因为每次 beginRecord 和 endRecord 都会创建一个图像。如果你想保存你看到的图像,你可以使用 save(fileName.png) 代替。下面是一段代码片段来演示:

void setup() {
  size(800,600);
  background(255);
  
  fill(255);
  strokeWeight(1);
}

void draw() {
  ellipse(mouseX,mouseY,100,100);
}

void mousePressed() {
  save("myImage.png");
}

另一方面,如果您真的想使用 beginRecord,请知道它会保存您在 beginRecordendRecord 之间绘制的所有内容。例如,您可以通过这种方式以编程方式创建图像文件,但您不能仅将快照添加到现有图像中(这就是为什么您在当前代码中只能看到“一帧”)。每次开始录制时,都会创建一个新图像。我对这种方法不是特别熟悉,但一种明显的做事方法是“保存”用户正在做的任何事情并重现这些说明以保存它们。这是一个执行此操作的示例(它在您右键单击时保存,并且我也仅在鼠标左键按下时才随意绘制):

import processing.svg.*;

boolean record;
ArrayList<PVector> positionsList;

void setup() {
  size(800,600);

  positionsList = new ArrayList<PVector>();
}

void draw() {
  background(255);

  fill(255);
  strokeWeight(1);
  for (PVector p : positionsList) {
    ellipse(p.x,p.y,100);
  }
  ellipse(mouseX,100);

  if (record) {
    positionsList.add(new PVector(mouseX,mouseY));
  }
}

void mousePressed() {
  record = mouseButton == LEFT;

  if (mouseButton == RIGHT) {
    beginRecord(SVG,"frame.svg");

    fill(255);
    strokeWeight(1);
    for (PVector p : positionsList) {
      ellipse(p.x,100);
    }

    endRecord();
  }
}

void mouseReleased() {
  record = false;
}

在绘图时:

DRAWING

文件(此处为 png,但在我的计算机上保存为 svg):

SAVED IMAGE

希望有帮助。玩得开心!

,
import processing.pdf.*;
PShape shape;

void setup () {
  size(1080,1080);
  beginRecord(PDF,"drawing.pdf");
  shape = loadShape("shape.svg");
  shapeMode(CENTER);
  background(0,255,0);
}

void draw() {


  shape.disableStyle();
  fill(255);
  strokeWeight(10);
  shape(shape,mouseX,200,200);
}

void keyPressed() {
  if (key == 's') {
    endRecord();
    exit();
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。