如何从多边形创建一个蒙版(处理)?

时间:2017-05-17 11:00:14

标签: processing polygon mask

我正在尝试从自定义形状创建图像的蒙版。 在处理过程中,我想出了这个:

Image img;
PImage img2;
PGraphics mGraphic;

void setup(){
 img = loadImage("mask.jpg");
 img2 = loadImage("test.jpg");
 mGraphic = createGraphics(1024,1024, JAVA2D);
 size(img.width, img.height);
}

void draw(){
  background(255);

  mGraphic.beginDraw();
  mGraphic.background(0); 
  mGraphic.ellipse(mouseX, mouseY, 400, 400); 
  mGraphic.endDraw();

  img2.mask(mGraphic);
  image(img2,0,0);

}

上面的代码将创建一个椭圆,它将成为图像的蒙版。 我希望通过Polygons生成的自定义形状实现相同的目标:

import java.awt.Polygon;

PImage img;
PImage img2;
PGraphics mGraphic;

CustomShape myShape = new CustomShape();

void setup(){
 img = loadImage("mask.jpg");
 img2 = loadImage("test.jpg");
 mGraphic = createGraphics(1024,1024, JAVA2D);

  myShape.addPoint(25, 25);
  myShape.addPoint(275, 25);
  myShape.addPoint(275, 75);
  myShape.addPoint(175, 75);
  myShape.addPoint(175, 275);
  myShape.addPoint(125, 275);
  myShape.addPoint(125, 75);
  myShape.addPoint(25, 75);
  smooth();

// img2.filter(INVERT);
 size(img.width, img.height);
}

void draw(){

  background(255);
  stroke(0);
  myShape.display();

  img2.mask(myShape);
  image(img2,0,0);

}


class CustomShape extends Polygon {

  void display() {
    stroke(0);
    fill(0);
    beginShape();
    for (int i=0; i<npoints; i++) {
      vertex(xpoints[i], ypoints[i]); 
    }
    endShape(CLOSE);
  }
}

不幸的是,此代码会给我一个错误:The method mask(int[]) in the type PImage is not applicable for the arguments (Masking_image_1.CustomShape)

这甚至可以获得与我的第一个代码相同的结果,但是然后使用自定义形状?我该如何解决?

如果还有任何问题,请告诉我。上面的代码可以在Processing中使用。

1 个答案:

答案 0 :(得分:1)

嗯,您的错误说明了一切:mask()函数不知道如何处理CustomShape参数。参数必须是PImage或掩码数组。更多信息可以在the reference找到。

要使用自定义形状,您要执行的操作是将该自定义形状绘制到PGraphicsPImage的子类),然后使用PGraphics作为面具。你可以使用createGraphics()函数来做到这一点。同样,可以在the reference中找到更多信息。