shared/java/Color.java (50 lines of code) (raw):

package org.jetbrains.skija; public class Color { // TODO premultiply, alpha public static int makeLerp(int c1, int c2, float weight) { int r = (int) (getR(c1) * weight + getR(c2) * (1 - weight)); int g = (int) (getG(c1) * weight + getG(c2) * (1 - weight)); int b = (int) (getB(c1) * weight + getB(c2) * (1 - weight)); return makeRGB(r, g, b); } public static int makeARGB(int a, int r, int g, int b) { assert 0 <= a && a <= 255 : "Alpha is out of 0..255 range: " + a; assert 0 <= r && r <= 255 : "Red is out of 0..255 range: " + r; assert 0 <= g && g <= 255 : "Green is out of 0..255 range: " + g; assert 0 <= b && b <= 255 : "Blue is out of 0..255 range: " + b; return ((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF); } public static int makeRGB(int r, int g, int b) { return makeARGB(255, r, g, b); } public static int getA(int color) { return (color >> 24) & 0xFF; } public static int getR(int color) { return (color >> 16) & 0xFF; } public static int getG(int color) { return (color >> 8) & 0xFF; } public static int getB(int color) { return color & 0xFF; } public static int withA(int color, int a) { assert 0 <= a && a <= 255 : "Alpha is out of 0..255 range: " + a; return ((a & 0xFF) << 24) | (color & 0x00FFFFFF); } public static int withR(int color, int r) { assert 0 <= r && r <= 255 : "Red is out of 0..255 range: " + r; return ((r & 0xFF) << 16) | (color & 0xFF00FFFF); } public static int withG(int color, int g) { assert 0 <= g && g <= 255 : "Green is out of 0..255 range: " + g; return ((g & 0xFF) << 8) | (color & 0xFFFF00FF); } public static int withB(int color, int b) { assert 0 <= b && b <= 255 : "Blue is out of 0..255 range: " + b; return (b & 0xFF) | (color & 0xFFFFFF00); } }