72 lines
1.1 KiB
Java
72 lines
1.1 KiB
Java
public class pixel {
|
|
public int red;
|
|
public int green;
|
|
public int blue;
|
|
|
|
public pixel(int r, int g, int b) {
|
|
red = r;
|
|
green = g;
|
|
blue = b;
|
|
}
|
|
|
|
public pixel(int v) {
|
|
red = v;
|
|
green = v;
|
|
blue = v;
|
|
}
|
|
|
|
public pixel invert() {
|
|
return invert(255);
|
|
}
|
|
|
|
public pixel invert(int max) {
|
|
return new pixel(max-red, max-green, max-blue);
|
|
}
|
|
|
|
public pixel grayscale() {
|
|
int v = (red + green + blue) / 3;
|
|
return new pixel(v);
|
|
}
|
|
|
|
public pixel emboss(pixel p) {
|
|
int v = 128 + absMax(
|
|
red - p.red,
|
|
green - p.green,
|
|
blue - p.blue
|
|
);
|
|
if (v > 255) v = 255;
|
|
else if (v < 0) v = 0;
|
|
return new pixel(v);
|
|
}
|
|
|
|
public String toString() {
|
|
return red + " " + green + " " + blue + " ";
|
|
}
|
|
|
|
public static pixel average(pixel...pixels) {
|
|
int r = 0,
|
|
g = 0,
|
|
b = 0;
|
|
for (pixel p : pixels) {
|
|
r += p.red;
|
|
g += p.green;
|
|
b += p.blue;
|
|
}
|
|
r = r / pixels.length;
|
|
g = g / pixels.length;
|
|
b = b / pixels.length;
|
|
return new pixel(r, g, b);
|
|
}
|
|
|
|
public static int absMax(int...vals) {
|
|
int max = 0;
|
|
for (int v : vals) {
|
|
if (Math.abs(v) > Math.abs(max)) {
|
|
max = v;
|
|
}
|
|
}
|
|
return max;
|
|
}
|
|
|
|
}
|