reanimate-0.4.2.0: src/Reanimate/ColorMap.hs
{-# LANGUAGE OverloadedStrings #-}
{-|
A colormap takes a number between 0 and 1 (inclusive) and spits out a color.
The colors do not have an alpha component but one can be added with
`Codec.Picture.Types.promotePixel`.
-}
module Reanimate.ColorMap
( turbo
, viridis
, magma
, inferno
, plasma
, sinebow
, parula
, cividis
, jet
, hsv
, hsvMatlab
, greyscale
) where
import Data.Text (Text)
import Data.Vector (Vector)
import qualified Data.Text as T
import qualified Data.Vector as V
import Codec.Picture
import Data.Char
import Data.Bits
import qualified Data.Colour.RGBSpace.HSV as HSV
import Data.Colour.RGBSpace
-- | Given a number t in the range [0,1], returns the corresponding color from
-- the “turbo” color scheme by Anton Mikhailov.
--
-- <<docs/gifs/doc_turbo.gif>>
turbo :: Double -> PixelRGB8
turbo t = PixelRGB8 red green blue
where
red = trunc (round (34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))
green = trunc (round (23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))
blue = trunc (round (27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66))))))
trunc :: Integer -> Pixel8
trunc = fromIntegral . min 255 . max 0
-- | Given a number t in the range [0,1], returns the corresponding color from
-- the “viridis” perceptually-uniform color scheme designed by van der Walt,
-- Smith and Firing for matplotlib, represented as an RGB string.
--
-- <<docs/gifs/doc_viridis.gif>>
viridis :: Double -> PixelRGB8
viridis = ramp (colors
"44015444025645045745055946075a46085c460a5d460b5e470d60470e614710634711644713\
\6548146748166848176948186a481a6c481b6d481c6e481d6f481f7048207148217348237448\
\2475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f\
\463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142\
\874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b\
\518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d\
\355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b\
\8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a\
\778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e\
\25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f\
\8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e\
\9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a685\
\22a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db2\
\7d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340\
\bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c765\
\5ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d0\
\5477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195\
\d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2b\
\b8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e2\
\19dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8\
\e621fbe723fde725")
-- | Given a number t in the range [0,1], returns the corresponding color from
-- the “magma” perceptually-uniform color scheme designed by van der Walt and
-- Smith for matplotlib, represented as an RGB string.
--
-- <<docs/gifs/doc_magma.gif>>
magma :: Double -> PixelRGB8
magma = ramp (colors
"00000401000501010601010802010902020b02020d03030f0303120404140504160605180605\
\1a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d3414\
\0e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e221150241253\
\25125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f\
\6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f\
\127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980\
\641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621\
\817822817922827b23827c23827e24828025828125818326818426818627818827818928818b\
\29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7f\
\a02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb336\
\7ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c8\
\3e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476a\
\dc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb57\
\60ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf6\
\6c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835f\
\fb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b\
\6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afe\
\b47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8d\
\fecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2\
\a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fc\
\f9bbfcfbbdfcfdbf")
-- | Given a number t in the range [0,1], returns the corresponding color from
-- the “inferno” perceptually-uniform color scheme designed by van der Walt
-- and Smith for matplotlib, represented as an RGB string.
--
-- <<docs/gifs/doc_inferno.gif>>
inferno :: Double -> PixelRGB8
inferno = ramp (colors
"00000401000501010601010802010a02020c02020e0302100403120403140504170604190705\
\1b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b3716\
\0b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b55\
\2b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a\
\67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d55\
\0f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e\
\6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e\
\6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f246990256892\
\25689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60\
\a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b935\
\56ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb\
\4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3c\
\db503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee860\
\2de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2\
\741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890c\
\f98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca1\
\08fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfb\
\ba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13d\
\f7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea\
\69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9\
\fc9dfafda1fcffa4")
-- | Given a number t in the range [0,1], returns the corresponding color from
-- the “plasma” perceptually-uniform color scheme designed by van der Walt and
-- Smith for matplotlib, represented as an RGB string.
--
-- <<docs/gifs/doc_plasma.gif>>
plasma :: Double -> PixelRGB8
plasma = ramp (colors
"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05\
\932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41\
\049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a4\
\5601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900\
\a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d\
\03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca4\
\8f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a\
\9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b0\
\2991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786\
\be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca45\
\7acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5\
\546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263\
\e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e971\
\58e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1\
\814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143\
\f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca3\
\38fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efe\
\b72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26\
\fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df\
\25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1\
\f525f0f724f0f921")
-- | Given a number t in the range [0,1], returns the corresponding color from
-- the “sinebow” color scheme by Jim Bumgardner and Charlie Loyd.
--
-- <<docs/gifs/doc_sinebow.gif>>
sinebow :: Double -> PixelRGB8
sinebow t = PixelRGB8 r g b
where
pi_1_3 = pi / 3
pi_2_3 = pi * 2 / 3
x = (0.5 - t) * pi
r = round $ 255 * sin x**2
g = round $ 255 * sin (x+pi_1_3)**2
b = round $ 255 * sin (x+pi_2_3)**2
-- | Given a number t in the range [0,1], returns the corresponding color from
-- the “cividis” color vision deficiency-optimized color scheme designed by
-- Nuñez, Anderton, and Renslow, represented as an RGB string.
--
-- <<docs/gifs/doc_cividis.gif>>
cividis :: Double -> PixelRGB8
cividis t = PixelRGB8 red green blue
where
red = trunc $ round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57)))))
green = trunc $ round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37)))))
blue = trunc $ round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))
trunc :: Integer -> Pixel8
trunc = fromIntegral . min 255 . max 0
-- | Jet colormap. Used to be the default in matlab. Obsolete.
--
-- <<docs/gifs/doc_jet.gif>>
jet :: Double -> PixelRGB8
jet t = PixelRGB8 red green blue
where
red = trunc $ min (4*t - 1.5) (-4*t + 4.5)
green = trunc $ min (4*t - 0.5) (-4*t + 3.5)
blue = trunc $ min (4*t + 0.5) (-4*t + 2.5)
trunc :: Double -> Pixel8
trunc = round . min 255 . max 0 . (*) 255
-- | hsv colormap. Goes from 0 degrees to 360 degrees.
--
-- <<docs/gifs/doc_hsv.gif>>
hsv :: Double -> PixelRGB8
hsv t = PixelRGB8 (round $ r*255) (round $ g*255) (round $ b*255)
where
RGB r g b = HSV.hsv (t * 360) 1 1
-- | Matlab hsv colormap. Goes from 0 degrees to 330 degrees.
--
-- <<docs/gifs/doc_hsvMatlab.gif>>
hsvMatlab :: Double -> PixelRGB8
hsvMatlab t = PixelRGB8 (round $ r*255) (round $ g*255) (round $ b*255)
where
RGB r g b = HSV.hsv (t * 330) 1 1
-- | Greyscale colormap.
--
-- <<docs/gifs/doc_greyscale.gif>>
greyscale :: Double -> PixelRGB8
greyscale t = PixelRGB8 v v v
where
v = round $ t * 255
-- | Parula is the default colormap for matlab.
--
-- <<docs/gifs/doc_parula.gif>>
parula :: Double -> PixelRGB8
parula = ramp vec
where
vec = V.fromList $ pixels colorList
pixels [] = []
pixels (r:g:b:xs) =
PixelRGB8 (round $ r*255) (round $ g*255) (round $ b*255) :
pixels xs
pixels _ = error "Reanimate.ColorMap.parula: Broken data"
colorList :: [Double]
colorList =
[0.2081, 0.1663, 0.5292
,0.2091, 0.1721, 0.5411
,0.2101, 0.1779, 0.5530
,0.2109, 0.1837, 0.5650
,0.2116, 0.1895, 0.5771
,0.2121, 0.1954, 0.5892
,0.2124, 0.2013, 0.6013
,0.2125, 0.2072, 0.6135
,0.2123, 0.2132, 0.6258
,0.2118, 0.2192, 0.6381
,0.2111, 0.2253, 0.6505
,0.2099, 0.2315, 0.6629
,0.2084, 0.2377, 0.6753
,0.2063, 0.2440, 0.6878
,0.2038, 0.2503, 0.7003
,0.2006, 0.2568, 0.7129
,0.1968, 0.2632, 0.7255
,0.1921, 0.2698, 0.7381
,0.1867, 0.2764, 0.7507
,0.1802, 0.2832, 0.7634
,0.1728, 0.2902, 0.7762
,0.1641, 0.2975, 0.7890
,0.1541, 0.3052, 0.8017
,0.1427, 0.3132, 0.8145
,0.1295, 0.3217, 0.8269
,0.1147, 0.3306, 0.8387
,0.0986, 0.3397, 0.8495
,0.0816, 0.3486, 0.8588
,0.0646, 0.3572, 0.8664
,0.0482, 0.3651, 0.8722
,0.0329, 0.3724, 0.8765
,0.0213, 0.3792, 0.8796
,0.0136, 0.3853, 0.8815
,0.0086, 0.3911, 0.8827
,0.0060, 0.3965, 0.8833
,0.0051, 0.4017, 0.8834
,0.0054, 0.4066, 0.8831
,0.0067, 0.4113, 0.8825
,0.0089, 0.4159, 0.8816
,0.0116, 0.4203, 0.8805
,0.0148, 0.4246, 0.8793
,0.0184, 0.4288, 0.8779
,0.0223, 0.4329, 0.8763
,0.0264, 0.4370, 0.8747
,0.0306, 0.4410, 0.8729
,0.0349, 0.4449, 0.8711
,0.0394, 0.4488, 0.8692
,0.0437, 0.4526, 0.8672
,0.0477, 0.4564, 0.8652
,0.0514, 0.4602, 0.8632
,0.0549, 0.4640, 0.8611
,0.0582, 0.4677, 0.8589
,0.0612, 0.4714, 0.8568
,0.0640, 0.4751, 0.8546
,0.0666, 0.4788, 0.8525
,0.0689, 0.4825, 0.8503
,0.0710, 0.4862, 0.8481
,0.0729, 0.4899, 0.8460
,0.0746, 0.4937, 0.8439
,0.0761, 0.4974, 0.8418
,0.0773, 0.5012, 0.8398
,0.0782, 0.5051, 0.8378
,0.0789, 0.5089, 0.8359
,0.0794, 0.5129, 0.8341
,0.0795, 0.5169, 0.8324
,0.0793, 0.5210, 0.8308
,0.0788, 0.5251, 0.8293
,0.0778, 0.5295, 0.8280
,0.0764, 0.5339, 0.8270
,0.0746, 0.5384, 0.8261
,0.0724, 0.5431, 0.8253
,0.0698, 0.5479, 0.8247
,0.0668, 0.5527, 0.8243
,0.0636, 0.5577, 0.8239
,0.0600, 0.5627, 0.8237
,0.0562, 0.5677, 0.8234
,0.0523, 0.5727, 0.8231
,0.0484, 0.5777, 0.8228
,0.0445, 0.5826, 0.8223
,0.0408, 0.5874, 0.8217
,0.0372, 0.5922, 0.8209
,0.0342, 0.5968, 0.8198
,0.0317, 0.6012, 0.8186
,0.0296, 0.6055, 0.8171
,0.0279, 0.6097, 0.8154
,0.0265, 0.6137, 0.8135
,0.0255, 0.6176, 0.8114
,0.0248, 0.6214, 0.8091
,0.0243, 0.6250, 0.8066
,0.0239, 0.6285, 0.8039
,0.0237, 0.6319, 0.8010
,0.0235, 0.6352, 0.7980
,0.0233, 0.6384, 0.7948
,0.0231, 0.6415, 0.7916
,0.0230, 0.6445, 0.7881
,0.0229, 0.6474, 0.7846
,0.0227, 0.6503, 0.7810
,0.0227, 0.6531, 0.7773
,0.0232, 0.6558, 0.7735
,0.0238, 0.6585, 0.7696
,0.0246, 0.6611, 0.7656
,0.0263, 0.6637, 0.7615
,0.0282, 0.6663, 0.7574
,0.0306, 0.6688, 0.7532
,0.0338, 0.6712, 0.7490
,0.0373, 0.6737, 0.7446
,0.0418, 0.6761, 0.7402
,0.0467, 0.6784, 0.7358
,0.0516, 0.6808, 0.7313
,0.0574, 0.6831, 0.7267
,0.0629, 0.6854, 0.7221
,0.0692, 0.6877, 0.7173
,0.0755, 0.6899, 0.7126
,0.0820, 0.6921, 0.7078
,0.0889, 0.6943, 0.7029
,0.0956, 0.6965, 0.6979
,0.1031, 0.6986, 0.6929
,0.1104, 0.7007, 0.6878
,0.1180, 0.7028, 0.6827
,0.1258, 0.7049, 0.6775
,0.1335, 0.7069, 0.6723
,0.1418, 0.7089, 0.6669
,0.1499, 0.7109, 0.6616
,0.1585, 0.7129, 0.6561
,0.1671, 0.7148, 0.6507
,0.1758, 0.7168, 0.6451
,0.1849, 0.7186, 0.6395
,0.1938, 0.7205, 0.6338
,0.2033, 0.7223, 0.6281
,0.2128, 0.7241, 0.6223
,0.2224, 0.7259, 0.6165
,0.2324, 0.7275, 0.6107
,0.2423, 0.7292, 0.6048
,0.2527, 0.7308, 0.5988
,0.2631, 0.7324, 0.5929
,0.2735, 0.7339, 0.5869
,0.2845, 0.7354, 0.5809
,0.2953, 0.7368, 0.5749
,0.3064, 0.7381, 0.5689
,0.3177, 0.7394, 0.5630
,0.3289, 0.7406, 0.5570
,0.3405, 0.7417, 0.5512
,0.3520, 0.7428, 0.5453
,0.3635, 0.7438, 0.5396
,0.3753, 0.7446, 0.5339
,0.3869, 0.7454, 0.5283
,0.3986, 0.7461, 0.5229
,0.4103, 0.7467, 0.5175
,0.4218, 0.7473, 0.5123
,0.4334, 0.7477, 0.5072
,0.4447, 0.7482, 0.5021
,0.4561, 0.7485, 0.4972
,0.4672, 0.7487, 0.4924
,0.4783, 0.7489, 0.4877
,0.4892, 0.7491, 0.4831
,0.5000, 0.7491, 0.4786
,0.5106, 0.7492, 0.4741
,0.5212, 0.7492, 0.4698
,0.5315, 0.7491, 0.4655
,0.5418, 0.7490, 0.4613
,0.5519, 0.7489, 0.4571
,0.5619, 0.7487, 0.4531
,0.5718, 0.7485, 0.4490
,0.5816, 0.7482, 0.4451
,0.5913, 0.7479, 0.4412
,0.6009, 0.7476, 0.4374
,0.6103, 0.7473, 0.4335
,0.6197, 0.7469, 0.4298
,0.6290, 0.7465, 0.4261
,0.6382, 0.7460, 0.4224
,0.6473, 0.7456, 0.4188
,0.6564, 0.7451, 0.4152
,0.6653, 0.7446, 0.4116
,0.6742, 0.7441, 0.4081
,0.6830, 0.7435, 0.4046
,0.6918, 0.7430, 0.4011
,0.7004, 0.7424, 0.3976
,0.7091, 0.7418, 0.3942
,0.7176, 0.7412, 0.3908
,0.7261, 0.7405, 0.3874
,0.7346, 0.7399, 0.3840
,0.7430, 0.7392, 0.3806
,0.7513, 0.7385, 0.3773
,0.7596, 0.7378, 0.3739
,0.7679, 0.7372, 0.3706
,0.7761, 0.7364, 0.3673
,0.7843, 0.7357, 0.3639
,0.7924, 0.7350, 0.3606
,0.8005, 0.7343, 0.3573
,0.8085, 0.7336, 0.3539
,0.8166, 0.7329, 0.3506
,0.8246, 0.7322, 0.3472
,0.8325, 0.7315, 0.3438
,0.8405, 0.7308, 0.3404
,0.8484, 0.7301, 0.3370
,0.8563, 0.7294, 0.3336
,0.8642, 0.7288, 0.3300
,0.8720, 0.7282, 0.3265
,0.8798, 0.7276, 0.3229
,0.8877, 0.7271, 0.3193
,0.8954, 0.7266, 0.3156
,0.9032, 0.7262, 0.3117
,0.9110, 0.7259, 0.3078
,0.9187, 0.7256, 0.3038
,0.9264, 0.7256, 0.2996
,0.9341, 0.7256, 0.2953
,0.9417, 0.7259, 0.2907
,0.9493, 0.7264, 0.2859
,0.9567, 0.7273, 0.2808
,0.9639, 0.7285, 0.2754
,0.9708, 0.7303, 0.2696
,0.9773, 0.7326, 0.2634
,0.9831, 0.7355, 0.2570
,0.9882, 0.7390, 0.2504
,0.9922, 0.7431, 0.2437
,0.9952, 0.7476, 0.2373
,0.9973, 0.7524, 0.2310
,0.9986, 0.7573, 0.2251
,0.9991, 0.7624, 0.2195
,0.9990, 0.7675, 0.2141
,0.9985, 0.7726, 0.2090
,0.9976, 0.7778, 0.2042
,0.9964, 0.7829, 0.1995
,0.9950, 0.7880, 0.1949
,0.9933, 0.7931, 0.1905
,0.9914, 0.7981, 0.1863
,0.9894, 0.8032, 0.1821
,0.9873, 0.8083, 0.1780
,0.9851, 0.8133, 0.1740
,0.9828, 0.8184, 0.1700
,0.9805, 0.8235, 0.1661
,0.9782, 0.8286, 0.1622
,0.9759, 0.8337, 0.1583
,0.9736, 0.8389, 0.1544
,0.9713, 0.8441, 0.1505
,0.9692, 0.8494, 0.1465
,0.9672, 0.8548, 0.1425
,0.9654, 0.8603, 0.1385
,0.9638, 0.8659, 0.1343
,0.9623, 0.8716, 0.1301
,0.9611, 0.8774, 0.1258
,0.9600, 0.8834, 0.1215
,0.9593, 0.8895, 0.1171
,0.9588, 0.8958, 0.1126
,0.9586, 0.9022, 0.1082
,0.9587, 0.9088, 0.1036
,0.9591, 0.9155, 0.0990
,0.9599, 0.9225, 0.0944
,0.9610, 0.9296, 0.0897
,0.9624, 0.9368, 0.0850
,0.9641, 0.9443, 0.0802
,0.9662, 0.9518, 0.0753
,0.9685, 0.9595, 0.0703
,0.9710, 0.9673, 0.0651
,0.9736, 0.9752, 0.0597
,0.9763, 0.9831, 0.0538]
--------------------------------------------------------------------------------
-- Helpers
colors :: Text -> Vector PixelRGB8
colors = V.fromList . map (toColor . map (fromIntegral . digitToInt) . T.unpack) . T.chunksOf 6
where
toColor [r1,r2,g1,g2,b1,b2] =
PixelRGB8 (r1 `shiftL` 4 + r2) (g1 `shiftL` 4 + g2) (b1 `shiftL` 4+b2)
toColor _ = error "Reanimate.ColorMap.colors: Broken data"
ramp :: Vector PixelRGB8 -> Double -> PixelRGB8
ramp v = \t -> v V.! max 0 (min (len-1) $ round $ t * (len'-1))
where
len = V.length v
len' = fromIntegral len