Processing练习之变换颜色

       案例代码如下:

import generativedesign.*;
import processing.pdf.*;
import java.util.Calendar;

boolean savePDF=false;
int tileCountX =2; //jianbianshuliang
int tileCountY=10;//hangshu

color[] colorsLeft =new color[tileCountY];
color[] colorsRight=new color[tileCountY];
color[] colors;
boolean interpolateShortest = true;//yansemoshikongzhi

void setup(){
  size(800,800);
  colorMode(HSB,360,100,100,100);//sexiang,baohedu,liangdu,toumingdu
  noStroke();
  shakeColors();//suijichanshengmeihangdezuoyoubianyanse
}
void draw(){
  if(savePDF){
    beginRecord(PDF,timestamp()+".pdf");
    noStroke();
    colorMode(HSB,360,100,100,100);
  }
  tileCountX=(int) map(mouseX,0,width,2,100);//map:yingshe
  tileCountY = (int) map(mouseY,0,height,2,10);
  float tileWidth =width/ (float)tileCountX;
  float tileHeight = height/ (float)tileCountY;
  color interCol;//chazhise
  colors =new color[tileCountX*tileCountY];//zongdeyanseshu
  int i=0;
 
  for(int gridY=0;gridY<tileCountY;gridY++)
  {
    color col1 = colorsLeft[gridY];
    color col2=colorsRight[gridY];
    for(int gridX=0;gridX<tileCountX;gridX++){
      float amount=map(gridX,0,tileCountX-1,0,1);//amount:jianbianguocheng(0[left],1[right])
      if(interpolateShortest){
        colorMode(RGB,255,255,255,255);
        interCol=lerpColor(col1,col2,amount);
        colorMode(HSB,360,100,100,100);
      }
      else{
        interCol=lerpColor(col1,col2,amount);
      }
      fill(interCol);//chazhitianchong
      float posX=tileWidth*gridX;
      float posY = tileHeight*gridY;
      rect(posX,posY,tileWidth,tileHeight);
      colors[i]=interCol;
      i++;
    }
  }    if(savePDF){
     savePDF=false;
     endRecord();
  }
}

  void shakeColors(){
    for(int i=0;i<tileCountY;i++){
      colorsLeft[i]=color(random(0,60),random(0,100),100);
      colorsRight[i]=color(random(160,190),100,random(0,100));
    }
  }
  void mouseReleased(){
    shakeColors();//yansesuijichansheng
  }
 
  void keyReleased(){
    if(key=='c'||key=='C')GenerativeDesign.saveASE(this,colors,timestamp()+".ase");
    if(key=='s'||key=='S')saveFrame(timestamp()+"_##.png");
    if(key=='p'||key=='P')savePDF=true;
    if(key=='1')interpolateShortest=true;
    if(key=='2')interpolateShortest=false;
  }
  String  timestamp(){
    Calendar now = Calendar.getInstance();
    return String.format("%1$ty%1$tm%1$td_%1$tH%1$tM%1$tyS",now);
  }

       保存代码并运行如图1

                                         图1

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦之妹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值