@@ -45,6 +45,42 @@ var clothColors = [
45
45
makeColor ( 255 , 0 , 0 ) , // Red
46
46
makeColor ( 0 , 0 , 0 ) , // Black
47
47
]
48
+ var clothColorsOpt = [
49
+ makeColor ( 178 , 178 , 178 ) , // White
50
+ makeColor ( 187 , 102 , 44 ) , // Orange
51
+ makeColor ( 152 , 61 , 161 ) , // Magenta
52
+ makeColor ( 84 , 111 , 170 ) , // Light blue
53
+ makeColor ( 156 , 145 , 23 ) , // Yellow
54
+ makeColor ( 47 , 151 , 38 ) , // Green
55
+ makeColor ( 174 , 105 , 124 ) , // Pink
56
+ makeColor ( 53 , 53 , 53 ) , // Gray
57
+ makeColor ( 127 , 133 , 133 ) , // Light grey
58
+ makeColor ( 32 , 94 , 120 ) , // Cyan
59
+ makeColor ( 103 , 43 , 156 ) , // Purple
60
+ makeColor ( 31 , 41 , 123 ) , // Blue
61
+ makeColor ( 68 , 41 , 22 ) , // Brown
62
+ makeColor ( 44 , 61 , 19 ) , // Cactus green
63
+ makeColor ( 131 , 36 , 32 ) , // Red
64
+ makeColor ( 21 , 18 , 18 ) , // Black
65
+ ]
66
+ var clothColorsOptHD = [
67
+ makeColor ( 168 , 168 , 168 ) , // White
68
+ makeColor ( 143 , 59 , 0 ) , // Orange
69
+ makeColor ( 152 , 0 , 67 ) , // Magenta
70
+ makeColor ( 0 , 153 , 153 ) , // Light blue
71
+ makeColor ( 150 , 150 , 0 ) , // Yellow
72
+ makeColor ( 59 , 143 , 0 ) , // Green
73
+ makeColor ( 167 , 83 , 125 ) , // Pink
74
+ makeColor ( 64 , 64 , 64 ) , // Gray
75
+ makeColor ( 101 , 101 , 101 ) , // Light grey
76
+ makeColor ( 0 , 83 , 83 ) , // Cyan
77
+ makeColor ( 43 , 12 , 75 ) , // Purple
78
+ makeColor ( 0 , 38 , 77 ) , // Blue
79
+ makeColor ( 52 , 25 , 0 ) , // Brown
80
+ makeColor ( 10 , 76 , 10 ) , // Cactus green
81
+ makeColor ( 127 , 9 , 9 ) , // Red
82
+ makeColor ( 17 , 17 , 17 ) , // Black
83
+ ]
48
84
49
85
// http://stackoverflow.com/questions/2103368/color-logic-algorithm/2103608#2103608
50
86
function colorDistance ( c1 , c2 ) {
@@ -58,31 +94,38 @@ function colorDistance(c1, c2) {
58
94
return Math . sqrt ( weightR * r * r + weightG * g * g + weightB * b * b ) ;
59
95
}
60
96
61
- function findClosestWoolColor ( col ) {
62
- var closestId = 0 ;
63
- var closestDistance = colorDistance ( col , clothColors [ 0 ] ) ;
64
-
65
- for ( var i = 1 ; i < clothColors . length ; i ++ ) {
66
- var dist = colorDistance ( col , clothColors [ i ] ) ;
67
-
68
- if ( dist < closestDistance ) {
69
- closestId = i ;
70
- closestDistance = dist ;
71
- }
72
- }
73
-
74
- return closestId ;
97
+ function findClosestWoolColor ( col , clothColors ) {
98
+ var closestId = 0 ;
99
+ var closestDistance = colorDistance ( col , clothColors [ 0 ] ) ;
100
+
101
+ for ( var i = 1 ; i < clothColors . length ; i ++ ) {
102
+ var dist = colorDistance ( col , clothColors [ i ] ) ;
103
+
104
+ if ( dist < closestDistance ) {
105
+ closestId = i ;
106
+ closestDistance = dist ;
107
+ }
108
+ }
109
+
110
+ return closestId ;
75
111
}
76
112
77
113
78
- context . checkArgs ( 1 , 2 , "<image> <orientation>" ) ;
114
+ context . checkArgs ( 1 , 3 , "<image> <orientation> <palette >" ) ;
79
115
80
116
var f = context . getSafeFile ( "drawings" , argv [ 1 ] ) ;
81
117
var sess = context . remember ( ) ;
82
118
var upright = argv [ 2 ] == "v" ;
83
-
119
+ var colors = clothColors ;
120
+ if ( argv [ 3 ] == "opt" ) {
121
+ colors = clothColorsOpt ;
122
+ player . print ( "Using optimized palette" ) ;
123
+ } else if ( argv [ 3 ] == "optHD" ) {
124
+ colors = clothColorsOptHD ;
125
+ player . print ( "Using optimized HD palette" ) ;
126
+ }
84
127
if ( ! f . exists ( ) ) {
85
- player . error ( "Specified file doesn't exist." ) ;
128
+ player . printError ( "Specified file doesn't exist." ) ;
86
129
} else {
87
130
var img = ImageIO . read ( f ) ;
88
131
@@ -94,7 +137,7 @@ if (!f.exists()) {
94
137
for ( var x = 0 ; x < width ; x ++ ) {
95
138
for ( var y = 0 ; y < height ; y ++ ) {
96
139
var c = new Color ( img . getRGB ( x , y ) ) ;
97
- var data = findClosestWoolColor ( c ) ;
140
+ var data = findClosestWoolColor ( c , colors ) ;
98
141
// Added this to enable the user to create images upright
99
142
// rather than flat on the ground
100
143
if ( ! upright ) {
0 commit comments