rewrite the color logic

This commit is contained in:
Willem Van Onsem 2021-02-16 12:15:12 +01:00
parent 90ea18379d
commit ffdd86df1c

View File

@ -39,226 +39,18 @@ rgbColorToColor240 r g b
| r == 218 && g == 218 && b == 218 = 237
| r == 228 && g == 228 && b == 228 = 238
| r == 238 && g == 238 && b == 238 = 239
| r <= 0 && g <= 0 && b <= 0 = 0
| r <= 0 && g <= 0 && b <= 95 = 1
| r <= 0 && g <= 0 && b <= 135 = 2
| r <= 0 && g <= 0 && b <= 175 = 3
| r <= 0 && g <= 0 && b <= 215 = 4
| r <= 0 && g <= 0 && b <= 255 = 5
| r <= 0 && g <= 95 && b <= 0 = 6
| r <= 0 && g <= 95 && b <= 95 = 7
| r <= 0 && g <= 95 && b <= 135 = 8
| r <= 0 && g <= 95 && b <= 175 = 9
| r <= 0 && g <= 95 && b <= 215 = 10
| r <= 0 && g <= 95 && b <= 255 = 11
| r <= 0 && g <= 135 && b <= 0 = 12
| r <= 0 && g <= 135 && b <= 95 = 13
| r <= 0 && g <= 135 && b <= 135 = 14
| r <= 0 && g <= 135 && b <= 175 = 15
| r <= 0 && g <= 135 && b <= 215 = 16
| r <= 0 && g <= 135 && b <= 255 = 17
| r <= 0 && g <= 175 && b <= 0 = 18
| r <= 0 && g <= 175 && b <= 95 = 19
| r <= 0 && g <= 175 && b <= 135 = 20
| r <= 0 && g <= 175 && b <= 175 = 21
| r <= 0 && g <= 175 && b <= 215 = 22
| r <= 0 && g <= 175 && b <= 255 = 23
| r <= 0 && g <= 215 && b <= 0 = 24
| r <= 0 && g <= 215 && b <= 95 = 25
| r <= 0 && g <= 215 && b <= 135 = 26
| r <= 0 && g <= 215 && b <= 175 = 27
| r <= 0 && g <= 215 && b <= 215 = 28
| r <= 0 && g <= 215 && b <= 255 = 29
| r <= 0 && g <= 255 && b <= 0 = 30
| r <= 0 && g <= 255 && b <= 95 = 31
| r <= 0 && g <= 255 && b <= 135 = 32
| r <= 0 && g <= 255 && b <= 175 = 33
| r <= 0 && g <= 255 && b <= 215 = 34
| r <= 0 && g <= 255 && b <= 255 = 35
| r <= 95 && g <= 0 && b <= 0 = 36
| r <= 95 && g <= 0 && b <= 95 = 37
| r <= 95 && g <= 0 && b <= 135 = 38
| r <= 95 && g <= 0 && b <= 175 = 39
| r <= 95 && g <= 0 && b <= 215 = 40
| r <= 95 && g <= 0 && b <= 255 = 41
| r <= 95 && g <= 95 && b <= 0 = 42
| r <= 95 && g <= 95 && b <= 95 = 43
| r <= 95 && g <= 95 && b <= 135 = 44
| r <= 95 && g <= 95 && b <= 175 = 45
| r <= 95 && g <= 95 && b <= 215 = 46
| r <= 95 && g <= 95 && b <= 255 = 47
| r <= 95 && g <= 135 && b <= 0 = 48
| r <= 95 && g <= 135 && b <= 95 = 49
| r <= 95 && g <= 135 && b <= 135 = 50
| r <= 95 && g <= 135 && b <= 175 = 51
| r <= 95 && g <= 135 && b <= 215 = 52
| r <= 95 && g <= 135 && b <= 255 = 53
| r <= 95 && g <= 175 && b <= 0 = 54
| r <= 95 && g <= 175 && b <= 95 = 55
| r <= 95 && g <= 175 && b <= 135 = 56
| r <= 95 && g <= 175 && b <= 175 = 57
| r <= 95 && g <= 175 && b <= 215 = 58
| r <= 95 && g <= 175 && b <= 255 = 59
| r <= 95 && g <= 215 && b <= 0 = 60
| r <= 95 && g <= 215 && b <= 95 = 61
| r <= 95 && g <= 215 && b <= 135 = 62
| r <= 95 && g <= 215 && b <= 175 = 63
| r <= 95 && g <= 215 && b <= 215 = 64
| r <= 95 && g <= 215 && b <= 255 = 65
| r <= 95 && g <= 255 && b <= 0 = 66
| r <= 95 && g <= 255 && b <= 95 = 67
| r <= 95 && g <= 255 && b <= 135 = 68
| r <= 95 && g <= 255 && b <= 175 = 69
| r <= 95 && g <= 255 && b <= 215 = 70
| r <= 95 && g <= 255 && b <= 255 = 71
| r <= 135 && g <= 0 && b <= 0 = 72
| r <= 135 && g <= 0 && b <= 95 = 73
| r <= 135 && g <= 0 && b <= 135 = 74
| r <= 135 && g <= 0 && b <= 175 = 75
| r <= 135 && g <= 0 && b <= 215 = 76
| r <= 135 && g <= 0 && b <= 255 = 77
| r <= 135 && g <= 95 && b <= 0 = 78
| r <= 135 && g <= 95 && b <= 95 = 79
| r <= 135 && g <= 95 && b <= 135 = 80
| r <= 135 && g <= 95 && b <= 175 = 81
| r <= 135 && g <= 95 && b <= 215 = 82
| r <= 135 && g <= 95 && b <= 255 = 83
| r <= 135 && g <= 135 && b <= 0 = 84
| r <= 135 && g <= 135 && b <= 95 = 85
| r <= 135 && g <= 135 && b <= 135 = 86
| r <= 135 && g <= 135 && b <= 175 = 87
| r <= 135 && g <= 135 && b <= 215 = 88
| r <= 135 && g <= 135 && b <= 255 = 89
| r <= 135 && g <= 175 && b <= 0 = 90
| r <= 135 && g <= 175 && b <= 95 = 91
| r <= 135 && g <= 175 && b <= 135 = 92
| r <= 135 && g <= 175 && b <= 175 = 93
| r <= 135 && g <= 175 && b <= 215 = 94
| r <= 135 && g <= 175 && b <= 255 = 95
| r <= 135 && g <= 215 && b <= 0 = 96
| r <= 135 && g <= 215 && b <= 95 = 97
| r <= 135 && g <= 215 && b <= 135 = 98
| r <= 135 && g <= 215 && b <= 175 = 99
| r <= 135 && g <= 215 && b <= 215 = 100
| r <= 135 && g <= 215 && b <= 255 = 101
| r <= 135 && g <= 255 && b <= 0 = 102
| r <= 135 && g <= 255 && b <= 95 = 103
| r <= 135 && g <= 255 && b <= 135 = 104
| r <= 135 && g <= 255 && b <= 175 = 105
| r <= 135 && g <= 255 && b <= 215 = 106
| r <= 135 && g <= 255 && b <= 255 = 107
| r <= 175 && g <= 0 && b <= 0 = 108
| r <= 175 && g <= 0 && b <= 95 = 109
| r <= 175 && g <= 0 && b <= 135 = 110
| r <= 175 && g <= 0 && b <= 175 = 111
| r <= 175 && g <= 0 && b <= 215 = 112
| r <= 175 && g <= 0 && b <= 255 = 113
| r <= 175 && g <= 95 && b <= 0 = 114
| r <= 175 && g <= 95 && b <= 95 = 115
| r <= 175 && g <= 95 && b <= 135 = 116
| r <= 175 && g <= 95 && b <= 175 = 117
| r <= 175 && g <= 95 && b <= 215 = 118
| r <= 175 && g <= 95 && b <= 255 = 119
| r <= 175 && g <= 135 && b <= 0 = 120
| r <= 175 && g <= 135 && b <= 95 = 121
| r <= 175 && g <= 135 && b <= 135 = 122
| r <= 175 && g <= 135 && b <= 175 = 123
| r <= 175 && g <= 135 && b <= 215 = 124
| r <= 175 && g <= 135 && b <= 255 = 125
| r <= 175 && g <= 175 && b <= 0 = 126
| r <= 175 && g <= 175 && b <= 95 = 127
| r <= 175 && g <= 175 && b <= 135 = 128
| r <= 175 && g <= 175 && b <= 175 = 129
| r <= 175 && g <= 175 && b <= 215 = 130
| r <= 175 && g <= 175 && b <= 255 = 131
| r <= 175 && g <= 215 && b <= 0 = 132
| r <= 175 && g <= 215 && b <= 95 = 133
| r <= 175 && g <= 215 && b <= 135 = 134
| r <= 175 && g <= 215 && b <= 175 = 135
| r <= 175 && g <= 215 && b <= 215 = 136
| r <= 175 && g <= 215 && b <= 255 = 137
| r <= 175 && g <= 255 && b <= 0 = 138
| r <= 175 && g <= 255 && b <= 95 = 139
| r <= 175 && g <= 255 && b <= 135 = 140
| r <= 175 && g <= 255 && b <= 175 = 141
| r <= 175 && g <= 255 && b <= 215 = 142
| r <= 175 && g <= 255 && b <= 255 = 143
| r <= 215 && g <= 0 && b <= 0 = 144
| r <= 215 && g <= 0 && b <= 95 = 145
| r <= 215 && g <= 0 && b <= 135 = 146
| r <= 215 && g <= 0 && b <= 175 = 147
| r <= 215 && g <= 0 && b <= 215 = 148
| r <= 215 && g <= 0 && b <= 255 = 149
| r <= 215 && g <= 95 && b <= 0 = 150
| r <= 215 && g <= 95 && b <= 95 = 151
| r <= 215 && g <= 95 && b <= 135 = 152
| r <= 215 && g <= 95 && b <= 175 = 153
| r <= 215 && g <= 95 && b <= 215 = 154
| r <= 215 && g <= 95 && b <= 255 = 155
| r <= 215 && g <= 135 && b <= 0 = 156
| r <= 215 && g <= 135 && b <= 95 = 157
| r <= 215 && g <= 135 && b <= 135 = 158
| r <= 215 && g <= 135 && b <= 175 = 159
| r <= 215 && g <= 135 && b <= 215 = 160
| r <= 215 && g <= 135 && b <= 255 = 161
| r <= 215 && g <= 175 && b <= 0 = 162
| r <= 215 && g <= 175 && b <= 95 = 163
| r <= 215 && g <= 175 && b <= 135 = 164
| r <= 215 && g <= 175 && b <= 175 = 165
| r <= 215 && g <= 175 && b <= 215 = 166
| r <= 215 && g <= 175 && b <= 255 = 167
| r <= 215 && g <= 215 && b <= 0 = 168
| r <= 215 && g <= 215 && b <= 95 = 169
| r <= 215 && g <= 215 && b <= 135 = 170
| r <= 215 && g <= 215 && b <= 175 = 171
| r <= 215 && g <= 215 && b <= 215 = 172
| r <= 215 && g <= 215 && b <= 255 = 173
| r <= 215 && g <= 255 && b <= 0 = 174
| r <= 215 && g <= 255 && b <= 95 = 175
| r <= 215 && g <= 255 && b <= 135 = 176
| r <= 215 && g <= 255 && b <= 175 = 177
| r <= 215 && g <= 255 && b <= 215 = 178
| r <= 215 && g <= 255 && b <= 255 = 179
| r <= 255 && g <= 0 && b <= 0 = 180
| r <= 255 && g <= 0 && b <= 95 = 181
| r <= 255 && g <= 0 && b <= 135 = 182
| r <= 255 && g <= 0 && b <= 175 = 183
| r <= 255 && g <= 0 && b <= 215 = 184
| r <= 255 && g <= 0 && b <= 255 = 185
| r <= 255 && g <= 95 && b <= 0 = 186
| r <= 255 && g <= 95 && b <= 95 = 187
| r <= 255 && g <= 95 && b <= 135 = 188
| r <= 255 && g <= 95 && b <= 175 = 189
| r <= 255 && g <= 95 && b <= 215 = 190
| r <= 255 && g <= 95 && b <= 255 = 191
| r <= 255 && g <= 135 && b <= 0 = 192
| r <= 255 && g <= 135 && b <= 95 = 193
| r <= 255 && g <= 135 && b <= 135 = 194
| r <= 255 && g <= 135 && b <= 175 = 195
| r <= 255 && g <= 135 && b <= 215 = 196
| r <= 255 && g <= 135 && b <= 255 = 197
| r <= 255 && g <= 175 && b <= 0 = 198
| r <= 255 && g <= 175 && b <= 95 = 199
| r <= 255 && g <= 175 && b <= 135 = 200
| r <= 255 && g <= 175 && b <= 175 = 201
| r <= 255 && g <= 175 && b <= 215 = 202
| r <= 255 && g <= 175 && b <= 255 = 203
| r <= 255 && g <= 215 && b <= 0 = 204
| r <= 255 && g <= 215 && b <= 95 = 205
| r <= 255 && g <= 215 && b <= 135 = 206
| r <= 255 && g <= 215 && b <= 175 = 207
| r <= 255 && g <= 215 && b <= 215 = 208
| r <= 255 && g <= 215 && b <= 255 = 209
| r <= 255 && g <= 255 && b <= 0 = 210
| r <= 255 && g <= 255 && b <= 95 = 211
| r <= 255 && g <= 255 && b <= 135 = 212
| r <= 255 && g <= 255 && b <= 175 = 213
| r <= 255 && g <= 255 && b <= 215 = 214
| r <= 255 && g <= 255 && b <= 255 = 215
| otherwise = error (printf "RGB color %d %d %d does not map to 240 palette."
| otherwise = 36 * go r + 6 * go g + go b
where go = simpleColor_ (error (printf "RGB color %d %d %d does not map to 240 palette."
(fromIntegral r :: Int)
(fromIntegral g :: Int)
(fromIntegral b :: Int))
(fromIntegral b :: Int)))
simpleColor_ :: Integral i => Word8 -> i -> Word8
simpleColor_ e c
| c <= 0 = 0
| c <= 95 = 1
| c <= 255 = fromIntegral ((c-15) `div` 40)
| otherwise = e
-- | Create a RGB triple from a value in the Color240 set.
color240CodeToRGB :: Word8 -> Maybe (Int, Int, Int)