处理:PGraphics和面具透明度

时间:2017-05-21 21:27:18

标签: processing mask pgraphics

我的代码上有 alpha 的问题。我做了两个条纹圆圈,但条纹之间的区域不是透明的。这是代码:

PGraphics circ, line, line2, circ2;

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

  circ = createGraphics(600,600,P2D);
  circ2 = createGraphics(600,600,P2D);
  line = createGraphics(600,600,P2D);
  line2 = createGraphics(600,600,P2D);

  makeCircle(line,circ,300,300,100,#00ff00);
  makeCircle(line2,circ2,350,350,100,#ff0000);


}

void draw(){
}

void makeCircle(PGraphics stripes, PGraphics mask, int x, int y, int r, 
color c){
  mask.smooth();
  mask.beginDraw();
  mask.background(0,0);
  mask.ellipse(x,y,r*2,r*2);
  mask.endDraw();


  stripes.beginDraw();
  stripes.noStroke();
  stripes.fill(c,200);
  for(int i=0;i<11;i++){
      stripes.rectMode(CENTER);
      stripes.rect(x+(i*20)-r,y,10,r*2);
  }
  stripes.mask(mask);
  stripes.endDraw();

  image(stripes,0,0);


}

我想做这个形状,如果你们知道另一种方式,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以使用Geomerative库轻松获得此功能。

import geomerative.*;

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

  RG.init(this);

}

void draw()
{
  background(255);    

  makeCircle(300, 300, 100, #00ff00);
  makeCircle(mouseX, mouseY, 100, #ff0000);

}

void makeCircle(int x, int y, int r, color c) {
  fill(c);
  RShape mask = RShape.createEllipse(x, y, r*2, r*2);
  for (int i=0; i<11; i++) {
    RShape strip = RShape.createRectangle(x+(i*20)-r, y-r, 10, r*2);
    RShape masked = strip.intersection(mask);
    masked.setStroke(false);
    RG.shape(masked);
  }
}