所以我发现color
数据类型实际上是一个int,有点读取位移,目的是让自己成为一个处理它的类。
所以这里是基本代码(没有getter / setter以及所有public
以便更好地理解):
public class Color{
public int value; //the 'color' datatype as an int
public int red, green, blue, alpha; //the components in RGB + Alpha
public Color(Color c){
this.value = c.value();
alpha = (value >> 24) & 0xFF;
red = (value >> 16) & 0xFF;
green = (value >> 8) & 0xFF;
blue = (value) & 0xFF;
}
public Color(int red, int green, int blue, int alpha){
this.red = checkValue(red);
this.green = checkValue(green);
this.blue = checkValue(blue);
this.alpha = checkValue(alpha);
value = (alpha << 24) & 0xFF
| (red << 16) & 0xFF
| (green << 8) & 0xFF
| (blue) & 0xFF;
}
//...
}
这似乎工作正常,但是:
Color c = new Color(255, 125, 645, 0);
fill(c.value); //shade of grey ?!
显然调用fill(int gray),所以我只能用这种方式绘制灰色阴影,但是
fill(c.red, c.green, c.blue, c.alpha); //the color I wanted
完全符合预期。
我做错了什么,或者我应该总是使用fill(c.red, c.green, c.blue, c.alpha);
吗?
答案 0 :(得分:0)
使用color
数据类型非常特定于Processing编辑器。如果您使用netbeans,我不确定您是否可以再使用它了。
来自the Processing eclipse tutorial:
另一个重要的注意事项。处理&#34;颜色&#34;原始不 存在于Java中。事实上,在处理一个&#34;颜色&#34;真的只是一个 整数(32位,带有红色,绿色,蓝色和alpha分量)。 处理翻译&#34;颜色&#34; to&#34; int&#34 ;,但Eclipse不会这样做 您。所以不要说:
你应该说:color pink = color(255,200,200);
int pink = color(255,200,200);
另一个线索是看Processing's source code。这链接到fill()
函数,该函数使用colorCalc()
函数根据int
值计算颜色。你可以通过它来追踪究竟发生了什么。
使用它你可以找到一种方法来使一个int
值起作用,但处理将颜色存储为单个int
值是你通常不会做的魔法的一部分。不得不玩。如果我是你,我会坚持将它们分开为RGB值。