I’m trying to access the individual RGBA channel values of a color variable in Processing.
In p5, it seems like color variables are objects, and they have a property called levels, which is an array, which can spit out individual channel values, like so:
let myColor = color(128, 64, 255);
console.log(myColor.levels[0]); // prints red channel value (128)
But from probing color vars in (Java) Processing, it seems like they’re coded as ints of some kind. I can’t find any documentation on accessing individual color channels in either the Reference or in the Javadoc. Is it possible?
Besides the methods alpha(), red(), green() & blue():
final color
c = 0x40F0A080, // color as a whole int (32-bit) (4-byte)
a = (int) alpha(c), // alpha channel
r = (int) red(c), // red channel
g = (int) green(c), // green channel
b = (int) blue(c); // blue channel
println("Color:\t", hex(c)); // 40F0A080
println("Alpha:\t", hex(a, 2)); // 40
println("Red:\t", hex(r, 2)); // F0
println("Green:\t", hex(g, 2)); // A0
println("Blue:\t", hex(b, 2)); // 80
noLoop();
//background(c);
background(r, g, b, a);
We can use bitwise operators in order to grab the 4 channels more performantly:
final color
c = 0x40F0A080, // color as a whole int (32-bit) (4-byte)
a = c >>> 030, // alpha channel
r = c >> 020 & 0xff, // red channel
g = c >> 010 & 0xff, // green channel
b = c & 0xff; // blue channel
println("Color:\t", hex(c)); // 40F0A080
println("Alpha:\t", hex(a, 2)); // 40
println("Red:\t", hex(r, 2)); // F0
println("Green:\t", hex(g, 2)); // A0
println("Blue:\t", hex(b, 2)); // 80
noLoop();
//background(c);
background(r, g, b, a);