处理:在netbeans中填充(int)VS填充(颜色)

时间:2017-03-04 10:49:27

标签: java netbeans colors processing

所以我发现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);吗?

1 个答案:

答案 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值。