-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGoodPalette.pde
119 lines (99 loc) · 2.79 KB
/
GoodPalette.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
class GoodPalette {
color[] goodcolor;
int numpal = 0;
int maxpal;
GoodPalette(int maxPaletteColors) {
maxpal = maxPaletteColors;
}
void readXML(String filename, int max) {
// read color data from CorelDRAW exported color palette XML file
XML xml;
print("Reading "+filename+"...");
xml = loadXML(filename);
XML colors = xml.getChild("colors");
XML page = colors.getChild("page");
XML[] val = page.getChildren("color");
// each val entry looks like this:
// <color cs="RGB" name="R236 G234 B234" tints="0.92549,0.917647,0.917647"/>
int limit = min(val.length,max);
goodcolor = new color[maxpal];
for (int i=0;i<limit;i++) {
float[] tints = float(split(val[i].getString("tints"),","));
goodcolor[i] = color(256*tints[0],256*tints[1],256*tints[2]);
numpal++;
}
println("done "+limit+" colors discovered");
}
boolean colorExists(color c) {
// check if color exist in the palette already
for (int n=0;n<numpal;n++) {
if (c==goodcolor[n]) {
return true;
}
}
return false;
}
void readBitmap(String fn) {
// read color data from the pixel values of a bitmap PNG JPG BMP GIF
PImage b;
print("Reading "+fn+"...");
b = loadImage(fn);
image(b,0,0);
// assume maximum number of colors will be found
goodcolor = new color[maxpal];
for (int x=0;x<b.width;x++){
for (int y=0;y<b.height;y++) {
color c = get(x,y);
if (!colorExists(c)) {
// add color to pal
if (numpal<maxpal) {
goodcolor[numpal] = c;
numpal++;
if (numpal>=maxpal) return;
}
}
}
}
println("done "+numpal+" colors discovered");
//showcolor();
}
void pumpBlack(int val) {
// pump black in
for (int n=0;n<val;n++) {
if (numpal<maxpal-2) {
goodcolor[numpal]=#000000;
numpal++;
}
}
}
void pumpWhite(int val) {
// pump black in
for (int n=0;n<val;n++) {
if (numpal<maxpal-2) {
goodcolor[numpal]=#FFFFFF;
numpal++;
}
}
}
color somecolor() {
// pick some random good color
return goodcolor[int(random(numpal))];
}
void show() {
// render all the colors to the screen
println("num colors:"+numpal);
// list all colors
float spc = (1.0*width)/numpal;
for (int n=0;n<numpal;n++) {
stroke(0);
fill(goodcolor[n]);
rect(spc*n,0,spc,height);
}
print("{");
for (int i=0;i<numpal;i++) {
print("#"+hex(goodcolor[i]));
if (i<numpal-1) print(", ");
}
println("};");
}
}