处理中的 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>
有
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>