{-# LANGUAGE OverloadedStrings #-} 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. -- -- <> 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. -- -- <> 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. -- -- <> 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. -- -- <> 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. -- -- <> 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. -- -- <> 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. -- -- <> 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. -- -- <> 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. -- -- <> 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. -- -- <> 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. -- -- <> greyscale :: Double -> PixelRGB8 greyscale t = PixelRGB8 v v v where v = round $ t * 255 -- | Parula is the default colormap for matlab. -- -- <> 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