处理中的 getColorMode()

getColorMode() in Processing

colorMode(HSB);
colorMode(RGB);

我可以设置颜色模式。 显然函数 getColorMode() 不存在。 是否有其他解决方案来获取颜色模式? 我想做的是这样的

int cMode = getColorMode();
colorMode(HSB);
// draw stuff
colorMode(cMode);

此代码在我的 class Track 中。我想绘制记录的 GPS 轨迹,色调值应由速度或海拔高度控制。 现在我在完成绘图后将颜色模式设置回 RGB。当然,最好将其设置回之前的颜色模式,而不是假设它已经是 RGB。

我们来看看the source for PApplet。 class 包含这个变量:

public PGraphics g;

这里是 colorMode() 函数:

public void colorMode(int mode) {
  if (recorder != null) recorder.colorMode(mode);
  g.colorMode(mode);
}

这告诉我们 PApplet#colorMode() 实际上只是 PGraphics#colorMode() 的捷径。

那么让我们看看the source for PGraphics。 class 中的 colorMode() 函数最终指向这里:

public void colorMode(int mode,
                        float max1, float max2, float max3, float maxA) {
    colorMode = mode;
    //more code

这导致我们找到 colorMode 变量:

/** The current colorMode */
public int colorMode; // = RGB;

换句话说,要进入当前颜色模式,您必须从 PApplet 转到其 g 变量,再转到其 colorMode 变量。如果你在草图中,它看起来像这样:

void setup() {
 size(500, 500);
 colorMode(HSB);
}

void draw() {

  background(0);

  if(g.colorMode == RGB){
    println("RGB");
  }
  else if(g.colorMode == HSB){
    println("HSB");
  }
}

如果您不在草图中,则需要使用 this 关键字传入 PApplet 实例。

PApplet mySketch;
int colorMode = mySketch.g.colorMode;

除了 Kevin 详尽的回答之外,您还可以使用 pushStyle()/popStyle() 调用独立的绘图样式(包括颜色空间):

void draw(){
  background(255);
  bars(HSB,0);
  bars(RGB,50);
}
void bars(int colorSpace,int y){
  pushStyle();
  colorMode(colorSpace);
  for(int i = 0 ; i < 10; i++){
    fill(i * 25,255,255);
    rect(10*i,y,10,50);
  }
  popStyle();
}

您可以 运行 下面的演示:

function setup(){
  createCanvas(100,100);
}
function draw(){
  background(255);
  bars(HSB,0);
  bars(RGB,50);
}
function bars(colorSpace,y){
  push();
  colorMode(colorSpace);
  for(var i = 0 ; i < 10; i++){
    fill(i * 25,255,255);
    rect(10*i,y,10,50);
  }
  pop();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.0/p5.min.js"></script>