001    /*
002     * Copyright (C) 2008-2010 by Holger Arndt
003     *
004     * This file is part of the Universal Java Matrix Package (UJMP).
005     * See the NOTICE file distributed with this work for additional
006     * information regarding copyright ownership and licensing.
007     *
008     * UJMP is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU Lesser General Public License as
010     * published by the Free Software Foundation; either version 2
011     * of the License, or (at your option) any later version.
012     *
013     * UJMP is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016     * GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public
019     * License along with UJMP; if not, write to the
020     * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
021     * Boston, MA  02110-1301  USA
022     */
023    
024    package org.ujmp.gui.colormap;
025    
026    import java.awt.Color;
027    import java.util.ArrayList;
028    import java.util.Arrays;
029    import java.util.List;
030    
031    public class ColorMap {
032    
033            private List<Color> colors = null;
034    
035            public static final Color[] colorBlackToGreen = { new Color(0, 0, 0), new Color(0, 1, 0), new Color(0, 2, 0),
036                            new Color(0, 3, 0), new Color(0, 4, 0), new Color(0, 5, 0), new Color(0, 6, 0), new Color(0, 7, 0),
037                            new Color(0, 8, 0), new Color(0, 9, 0), new Color(0, 10, 0), new Color(0, 11, 0), new Color(0, 12, 0),
038                            new Color(0, 13, 0), new Color(0, 14, 0), new Color(0, 15, 0), new Color(0, 16, 0), new Color(0, 17, 0),
039                            new Color(0, 18, 0), new Color(0, 19, 0), new Color(0, 20, 0), new Color(0, 21, 0), new Color(0, 22, 0),
040                            new Color(0, 23, 0), new Color(0, 24, 0), new Color(0, 25, 0), new Color(0, 26, 0), new Color(0, 27, 0),
041                            new Color(0, 28, 0), new Color(0, 29, 0), new Color(0, 30, 0), new Color(0, 31, 0), new Color(0, 32, 0),
042                            new Color(0, 33, 0), new Color(0, 34, 0), new Color(0, 35, 0), new Color(0, 36, 0), new Color(0, 37, 0),
043                            new Color(0, 38, 0), new Color(0, 39, 0), new Color(0, 40, 0), new Color(0, 41, 0), new Color(0, 42, 0),
044                            new Color(0, 43, 0), new Color(0, 44, 0), new Color(0, 45, 0), new Color(0, 46, 0), new Color(0, 47, 0),
045                            new Color(0, 48, 0), new Color(0, 49, 0), new Color(0, 50, 0), new Color(0, 51, 0), new Color(0, 52, 0),
046                            new Color(0, 53, 0), new Color(0, 54, 0), new Color(0, 55, 0), new Color(0, 56, 0), new Color(0, 57, 0),
047                            new Color(0, 58, 0), new Color(0, 59, 0), new Color(0, 60, 0), new Color(0, 61, 0), new Color(0, 62, 0),
048                            new Color(0, 63, 0), new Color(0, 64, 0), new Color(0, 65, 0), new Color(0, 66, 0), new Color(0, 67, 0),
049                            new Color(0, 68, 0), new Color(0, 69, 0), new Color(0, 70, 0), new Color(0, 71, 0), new Color(0, 72, 0),
050                            new Color(0, 73, 0), new Color(0, 74, 0), new Color(0, 75, 0), new Color(0, 76, 0), new Color(0, 77, 0),
051                            new Color(0, 78, 0), new Color(0, 79, 0), new Color(0, 80, 0), new Color(0, 81, 0), new Color(0, 82, 0),
052                            new Color(0, 83, 0), new Color(0, 84, 0), new Color(0, 85, 0), new Color(0, 86, 0), new Color(0, 87, 0),
053                            new Color(0, 88, 0), new Color(0, 89, 0), new Color(0, 90, 0), new Color(0, 91, 0), new Color(0, 92, 0),
054                            new Color(0, 93, 0), new Color(0, 94, 0), new Color(0, 95, 0), new Color(0, 96, 0), new Color(0, 97, 0),
055                            new Color(0, 98, 0), new Color(0, 99, 0), new Color(0, 100, 0), new Color(0, 101, 0), new Color(0, 102, 0),
056                            new Color(0, 103, 0), new Color(0, 104, 0), new Color(0, 105, 0), new Color(0, 106, 0),
057                            new Color(0, 107, 0), new Color(0, 108, 0), new Color(0, 109, 0), new Color(0, 110, 0),
058                            new Color(0, 111, 0), new Color(0, 112, 0), new Color(0, 113, 0), new Color(0, 114, 0),
059                            new Color(0, 115, 0), new Color(0, 116, 0), new Color(0, 117, 0), new Color(0, 118, 0),
060                            new Color(0, 119, 0), new Color(0, 120, 0), new Color(0, 121, 0), new Color(0, 122, 0),
061                            new Color(0, 123, 0), new Color(0, 124, 0), new Color(0, 125, 0), new Color(0, 126, 0),
062                            new Color(0, 127, 0), new Color(0, 128, 0), new Color(0, 129, 0), new Color(0, 130, 0),
063                            new Color(0, 131, 0), new Color(0, 132, 0), new Color(0, 133, 0), new Color(0, 134, 0),
064                            new Color(0, 135, 0), new Color(0, 136, 0), new Color(0, 137, 0), new Color(0, 138, 0),
065                            new Color(0, 139, 0), new Color(0, 140, 0), new Color(0, 141, 0), new Color(0, 142, 0),
066                            new Color(0, 143, 0), new Color(0, 144, 0), new Color(0, 145, 0), new Color(0, 146, 0),
067                            new Color(0, 147, 0), new Color(0, 148, 0), new Color(0, 149, 0), new Color(0, 150, 0),
068                            new Color(0, 151, 0), new Color(0, 152, 0), new Color(0, 153, 0), new Color(0, 154, 0),
069                            new Color(0, 155, 0), new Color(0, 156, 0), new Color(0, 157, 0), new Color(0, 158, 0),
070                            new Color(0, 159, 0), new Color(0, 160, 0), new Color(0, 161, 0), new Color(0, 162, 0),
071                            new Color(0, 163, 0), new Color(0, 164, 0), new Color(0, 165, 0), new Color(0, 166, 0),
072                            new Color(0, 167, 0), new Color(0, 168, 0), new Color(0, 169, 0), new Color(0, 170, 0),
073                            new Color(0, 171, 0), new Color(0, 172, 0), new Color(0, 173, 0), new Color(0, 174, 0),
074                            new Color(0, 175, 0), new Color(0, 176, 0), new Color(0, 177, 0), new Color(0, 178, 0),
075                            new Color(0, 179, 0), new Color(0, 180, 0), new Color(0, 181, 0), new Color(0, 182, 0),
076                            new Color(0, 183, 0), new Color(0, 184, 0), new Color(0, 185, 0), new Color(0, 186, 0),
077                            new Color(0, 187, 0), new Color(0, 188, 0), new Color(0, 189, 0), new Color(0, 190, 0),
078                            new Color(0, 191, 0), new Color(0, 192, 0), new Color(0, 193, 0), new Color(0, 194, 0),
079                            new Color(0, 195, 0), new Color(0, 196, 0), new Color(0, 197, 0), new Color(0, 198, 0),
080                            new Color(0, 199, 0), new Color(0, 200, 0), new Color(0, 201, 0), new Color(0, 202, 0),
081                            new Color(0, 203, 0), new Color(0, 204, 0), new Color(0, 205, 0), new Color(0, 206, 0),
082                            new Color(0, 207, 0), new Color(0, 208, 0), new Color(0, 209, 0), new Color(0, 210, 0),
083                            new Color(0, 211, 0), new Color(0, 212, 0), new Color(0, 213, 0), new Color(0, 214, 0),
084                            new Color(0, 215, 0), new Color(0, 216, 0), new Color(0, 217, 0), new Color(0, 218, 0),
085                            new Color(0, 219, 0), new Color(0, 220, 0), new Color(0, 221, 0), new Color(0, 222, 0),
086                            new Color(0, 223, 0), new Color(0, 224, 0), new Color(0, 225, 0), new Color(0, 226, 0),
087                            new Color(0, 227, 0), new Color(0, 228, 0), new Color(0, 229, 0), new Color(0, 230, 0),
088                            new Color(0, 231, 0), new Color(0, 232, 0), new Color(0, 233, 0), new Color(0, 234, 0),
089                            new Color(0, 235, 0), new Color(0, 236, 0), new Color(0, 237, 0), new Color(0, 238, 0),
090                            new Color(0, 239, 0), new Color(0, 240, 0), new Color(0, 241, 0), new Color(0, 242, 0),
091                            new Color(0, 243, 0), new Color(0, 244, 0), new Color(0, 245, 0), new Color(0, 246, 0),
092                            new Color(0, 247, 0), new Color(0, 248, 0), new Color(0, 249, 0), new Color(0, 250, 0),
093                            new Color(0, 251, 0), new Color(0, 252, 0), new Color(0, 253, 0), new Color(0, 254, 0),
094                            new Color(0, 255, 0) };
095    
096            public static final Color[] colorGreenToYellow = { new Color(0, 255, 0), new Color(1, 255, 0),
097                            new Color(2, 255, 0), new Color(3, 255, 0), new Color(4, 255, 0), new Color(5, 255, 0),
098                            new Color(6, 255, 0), new Color(7, 255, 0), new Color(8, 255, 0), new Color(9, 255, 0),
099                            new Color(10, 255, 0), new Color(11, 255, 0), new Color(12, 255, 0), new Color(13, 255, 0),
100                            new Color(14, 255, 0), new Color(15, 255, 0), new Color(16, 255, 0), new Color(17, 255, 0),
101                            new Color(18, 255, 0), new Color(19, 255, 0), new Color(20, 255, 0), new Color(21, 255, 0),
102                            new Color(22, 255, 0), new Color(23, 255, 0), new Color(24, 255, 0), new Color(25, 255, 0),
103                            new Color(26, 255, 0), new Color(27, 255, 0), new Color(28, 255, 0), new Color(29, 255, 0),
104                            new Color(30, 255, 0), new Color(31, 255, 0), new Color(32, 255, 0), new Color(33, 255, 0),
105                            new Color(34, 255, 0), new Color(35, 255, 0), new Color(36, 255, 0), new Color(37, 255, 0),
106                            new Color(38, 255, 0), new Color(39, 255, 0), new Color(40, 255, 0), new Color(41, 255, 0),
107                            new Color(42, 255, 0), new Color(43, 255, 0), new Color(44, 255, 0), new Color(45, 255, 0),
108                            new Color(46, 255, 0), new Color(47, 255, 0), new Color(48, 255, 0), new Color(49, 255, 0),
109                            new Color(50, 255, 0), new Color(51, 255, 0), new Color(52, 255, 0), new Color(53, 255, 0),
110                            new Color(54, 255, 0), new Color(55, 255, 0), new Color(56, 255, 0), new Color(57, 255, 0),
111                            new Color(58, 255, 0), new Color(59, 255, 0), new Color(60, 255, 0), new Color(61, 255, 0),
112                            new Color(62, 255, 0), new Color(63, 255, 0), new Color(64, 255, 0), new Color(65, 255, 0),
113                            new Color(66, 255, 0), new Color(67, 255, 0), new Color(68, 255, 0), new Color(69, 255, 0),
114                            new Color(70, 255, 0), new Color(71, 255, 0), new Color(72, 255, 0), new Color(73, 255, 0),
115                            new Color(74, 255, 0), new Color(75, 255, 0), new Color(76, 255, 0), new Color(77, 255, 0),
116                            new Color(78, 255, 0), new Color(79, 255, 0), new Color(80, 255, 0), new Color(81, 255, 0),
117                            new Color(82, 255, 0), new Color(83, 255, 0), new Color(84, 255, 0), new Color(85, 255, 0),
118                            new Color(86, 255, 0), new Color(87, 255, 0), new Color(88, 255, 0), new Color(89, 255, 0),
119                            new Color(90, 255, 0), new Color(91, 255, 0), new Color(92, 255, 0), new Color(93, 255, 0),
120                            new Color(94, 255, 0), new Color(95, 255, 0), new Color(96, 255, 0), new Color(97, 255, 0),
121                            new Color(98, 255, 0), new Color(99, 255, 0), new Color(100, 255, 0), new Color(101, 255, 0),
122                            new Color(102, 255, 0), new Color(103, 255, 0), new Color(104, 255, 0), new Color(105, 255, 0),
123                            new Color(106, 255, 0), new Color(107, 255, 0), new Color(108, 255, 0), new Color(109, 255, 0),
124                            new Color(110, 255, 0), new Color(111, 255, 0), new Color(112, 255, 0), new Color(113, 255, 0),
125                            new Color(114, 255, 0), new Color(115, 255, 0), new Color(116, 255, 0), new Color(117, 255, 0),
126                            new Color(118, 255, 0), new Color(119, 255, 0), new Color(120, 255, 0), new Color(121, 255, 0),
127                            new Color(122, 255, 0), new Color(123, 255, 0), new Color(124, 255, 0), new Color(125, 255, 0),
128                            new Color(126, 255, 0), new Color(127, 255, 0), new Color(128, 255, 0), new Color(129, 255, 0),
129                            new Color(130, 255, 0), new Color(131, 255, 0), new Color(132, 255, 0), new Color(133, 255, 0),
130                            new Color(134, 255, 0), new Color(135, 255, 0), new Color(136, 255, 0), new Color(137, 255, 0),
131                            new Color(138, 255, 0), new Color(139, 255, 0), new Color(140, 255, 0), new Color(141, 255, 0),
132                            new Color(142, 255, 0), new Color(143, 255, 0), new Color(144, 255, 0), new Color(145, 255, 0),
133                            new Color(146, 255, 0), new Color(147, 255, 0), new Color(148, 255, 0), new Color(149, 255, 0),
134                            new Color(150, 255, 0), new Color(151, 255, 0), new Color(152, 255, 0), new Color(153, 255, 0),
135                            new Color(154, 255, 0), new Color(155, 255, 0), new Color(156, 255, 0), new Color(157, 255, 0),
136                            new Color(158, 255, 0), new Color(159, 255, 0), new Color(160, 255, 0), new Color(161, 255, 0),
137                            new Color(162, 255, 0), new Color(163, 255, 0), new Color(164, 255, 0), new Color(165, 255, 0),
138                            new Color(166, 255, 0), new Color(167, 255, 0), new Color(168, 255, 0), new Color(169, 255, 0),
139                            new Color(170, 255, 0), new Color(171, 255, 0), new Color(172, 255, 0), new Color(173, 255, 0),
140                            new Color(174, 255, 0), new Color(175, 255, 0), new Color(176, 255, 0), new Color(177, 255, 0),
141                            new Color(178, 255, 0), new Color(179, 255, 0), new Color(180, 255, 0), new Color(181, 255, 0),
142                            new Color(182, 255, 0), new Color(183, 255, 0), new Color(184, 255, 0), new Color(185, 255, 0),
143                            new Color(186, 255, 0), new Color(187, 255, 0), new Color(188, 255, 0), new Color(189, 255, 0),
144                            new Color(190, 255, 0), new Color(191, 255, 0), new Color(192, 255, 0), new Color(193, 255, 0),
145                            new Color(194, 255, 0), new Color(195, 255, 0), new Color(196, 255, 0), new Color(197, 255, 0),
146                            new Color(198, 255, 0), new Color(199, 255, 0), new Color(200, 255, 0), new Color(201, 255, 0),
147                            new Color(202, 255, 0), new Color(203, 255, 0), new Color(204, 255, 0), new Color(205, 255, 0),
148                            new Color(206, 255, 0), new Color(207, 255, 0), new Color(208, 255, 0), new Color(209, 255, 0),
149                            new Color(210, 255, 0), new Color(211, 255, 0), new Color(212, 255, 0), new Color(213, 255, 0),
150                            new Color(214, 255, 0), new Color(215, 255, 0), new Color(216, 255, 0), new Color(217, 255, 0),
151                            new Color(218, 255, 0), new Color(219, 255, 0), new Color(220, 255, 0), new Color(221, 255, 0),
152                            new Color(222, 255, 0), new Color(223, 255, 0), new Color(224, 255, 0), new Color(225, 255, 0),
153                            new Color(226, 255, 0), new Color(227, 255, 0), new Color(228, 255, 0), new Color(229, 255, 0),
154                            new Color(230, 255, 0), new Color(231, 255, 0), new Color(232, 255, 0), new Color(233, 255, 0),
155                            new Color(234, 255, 0), new Color(235, 255, 0), new Color(236, 255, 0), new Color(237, 255, 0),
156                            new Color(238, 255, 0), new Color(239, 255, 0), new Color(240, 255, 0), new Color(241, 255, 0),
157                            new Color(242, 255, 0), new Color(243, 255, 0), new Color(244, 255, 0), new Color(245, 255, 0),
158                            new Color(246, 255, 0), new Color(247, 255, 0), new Color(248, 255, 0), new Color(249, 255, 0),
159                            new Color(250, 255, 0), new Color(251, 255, 0), new Color(252, 255, 0), new Color(253, 255, 0),
160                            new Color(254, 255, 0), new Color(255, 255, 0) };
161    
162            public static final Color[] colorRedToBlack = { new Color(255, 0, 0), new Color(254, 0, 0), new Color(253, 0, 0),
163                            new Color(252, 0, 0), new Color(251, 0, 0), new Color(250, 0, 0), new Color(249, 0, 0),
164                            new Color(248, 0, 0), new Color(247, 0, 0), new Color(246, 0, 0), new Color(245, 0, 0),
165                            new Color(244, 0, 0), new Color(243, 0, 0), new Color(242, 0, 0), new Color(241, 0, 0),
166                            new Color(240, 0, 0), new Color(239, 0, 0), new Color(238, 0, 0), new Color(237, 0, 0),
167                            new Color(236, 0, 0), new Color(235, 0, 0), new Color(234, 0, 0), new Color(233, 0, 0),
168                            new Color(232, 0, 0), new Color(231, 0, 0), new Color(230, 0, 0), new Color(229, 0, 0),
169                            new Color(228, 0, 0), new Color(227, 0, 0), new Color(226, 0, 0), new Color(225, 0, 0),
170                            new Color(224, 0, 0), new Color(223, 0, 0), new Color(222, 0, 0), new Color(221, 0, 0),
171                            new Color(220, 0, 0), new Color(219, 0, 0), new Color(218, 0, 0), new Color(217, 0, 0),
172                            new Color(216, 0, 0), new Color(215, 0, 0), new Color(214, 0, 0), new Color(213, 0, 0),
173                            new Color(212, 0, 0), new Color(211, 0, 0), new Color(210, 0, 0), new Color(209, 0, 0),
174                            new Color(208, 0, 0), new Color(207, 0, 0), new Color(206, 0, 0), new Color(205, 0, 0),
175                            new Color(204, 0, 0), new Color(203, 0, 0), new Color(202, 0, 0), new Color(201, 0, 0),
176                            new Color(200, 0, 0), new Color(199, 0, 0), new Color(198, 0, 0), new Color(197, 0, 0),
177                            new Color(196, 0, 0), new Color(195, 0, 0), new Color(194, 0, 0), new Color(193, 0, 0),
178                            new Color(192, 0, 0), new Color(191, 0, 0), new Color(190, 0, 0), new Color(189, 0, 0),
179                            new Color(188, 0, 0), new Color(187, 0, 0), new Color(186, 0, 0), new Color(185, 0, 0),
180                            new Color(184, 0, 0), new Color(183, 0, 0), new Color(182, 0, 0), new Color(181, 0, 0),
181                            new Color(180, 0, 0), new Color(179, 0, 0), new Color(178, 0, 0), new Color(177, 0, 0),
182                            new Color(176, 0, 0), new Color(175, 0, 0), new Color(174, 0, 0), new Color(173, 0, 0),
183                            new Color(172, 0, 0), new Color(171, 0, 0), new Color(170, 0, 0), new Color(169, 0, 0),
184                            new Color(168, 0, 0), new Color(167, 0, 0), new Color(166, 0, 0), new Color(165, 0, 0),
185                            new Color(164, 0, 0), new Color(163, 0, 0), new Color(162, 0, 0), new Color(161, 0, 0),
186                            new Color(160, 0, 0), new Color(159, 0, 0), new Color(158, 0, 0), new Color(157, 0, 0),
187                            new Color(156, 0, 0), new Color(155, 0, 0), new Color(154, 0, 0), new Color(153, 0, 0),
188                            new Color(152, 0, 0), new Color(151, 0, 0), new Color(150, 0, 0), new Color(149, 0, 0),
189                            new Color(148, 0, 0), new Color(147, 0, 0), new Color(146, 0, 0), new Color(145, 0, 0),
190                            new Color(144, 0, 0), new Color(143, 0, 0), new Color(142, 0, 0), new Color(141, 0, 0),
191                            new Color(140, 0, 0), new Color(139, 0, 0), new Color(138, 0, 0), new Color(137, 0, 0),
192                            new Color(136, 0, 0), new Color(135, 0, 0), new Color(134, 0, 0), new Color(133, 0, 0),
193                            new Color(132, 0, 0), new Color(131, 0, 0), new Color(130, 0, 0), new Color(129, 0, 0),
194                            new Color(128, 0, 0), new Color(127, 0, 0), new Color(126, 0, 0), new Color(125, 0, 0),
195                            new Color(124, 0, 0), new Color(123, 0, 0), new Color(122, 0, 0), new Color(121, 0, 0),
196                            new Color(120, 0, 0), new Color(119, 0, 0), new Color(118, 0, 0), new Color(117, 0, 0),
197                            new Color(116, 0, 0), new Color(115, 0, 0), new Color(114, 0, 0), new Color(113, 0, 0),
198                            new Color(112, 0, 0), new Color(111, 0, 0), new Color(110, 0, 0), new Color(109, 0, 0),
199                            new Color(108, 0, 0), new Color(107, 0, 0), new Color(106, 0, 0), new Color(105, 0, 0),
200                            new Color(104, 0, 0), new Color(103, 0, 0), new Color(102, 0, 0), new Color(101, 0, 0),
201                            new Color(100, 0, 0), new Color(99, 0, 0), new Color(98, 0, 0), new Color(97, 0, 0), new Color(96, 0, 0),
202                            new Color(95, 0, 0), new Color(94, 0, 0), new Color(93, 0, 0), new Color(92, 0, 0), new Color(91, 0, 0),
203                            new Color(90, 0, 0), new Color(89, 0, 0), new Color(88, 0, 0), new Color(87, 0, 0), new Color(86, 0, 0),
204                            new Color(85, 0, 0), new Color(84, 0, 0), new Color(83, 0, 0), new Color(82, 0, 0), new Color(81, 0, 0),
205                            new Color(80, 0, 0), new Color(79, 0, 0), new Color(78, 0, 0), new Color(77, 0, 0), new Color(76, 0, 0),
206                            new Color(75, 0, 0), new Color(74, 0, 0), new Color(73, 0, 0), new Color(72, 0, 0), new Color(71, 0, 0),
207                            new Color(70, 0, 0), new Color(69, 0, 0), new Color(68, 0, 0), new Color(67, 0, 0), new Color(66, 0, 0),
208                            new Color(65, 0, 0), new Color(64, 0, 0), new Color(63, 0, 0), new Color(62, 0, 0), new Color(61, 0, 0),
209                            new Color(60, 0, 0), new Color(59, 0, 0), new Color(58, 0, 0), new Color(57, 0, 0), new Color(56, 0, 0),
210                            new Color(55, 0, 0), new Color(54, 0, 0), new Color(53, 0, 0), new Color(52, 0, 0), new Color(51, 0, 0),
211                            new Color(50, 0, 0), new Color(49, 0, 0), new Color(48, 0, 0), new Color(47, 0, 0), new Color(46, 0, 0),
212                            new Color(45, 0, 0), new Color(44, 0, 0), new Color(43, 0, 0), new Color(42, 0, 0), new Color(41, 0, 0),
213                            new Color(40, 0, 0), new Color(39, 0, 0), new Color(38, 0, 0), new Color(37, 0, 0), new Color(36, 0, 0),
214                            new Color(35, 0, 0), new Color(34, 0, 0), new Color(33, 0, 0), new Color(32, 0, 0), new Color(31, 0, 0),
215                            new Color(30, 0, 0), new Color(29, 0, 0), new Color(28, 0, 0), new Color(27, 0, 0), new Color(26, 0, 0),
216                            new Color(25, 0, 0), new Color(24, 0, 0), new Color(23, 0, 0), new Color(22, 0, 0), new Color(21, 0, 0),
217                            new Color(20, 0, 0), new Color(19, 0, 0), new Color(18, 0, 0), new Color(17, 0, 0), new Color(16, 0, 0),
218                            new Color(15, 0, 0), new Color(14, 0, 0), new Color(13, 0, 0), new Color(12, 0, 0), new Color(11, 0, 0),
219                            new Color(10, 0, 0), new Color(9, 0, 0), new Color(8, 0, 0), new Color(7, 0, 0), new Color(6, 0, 0),
220                            new Color(5, 0, 0), new Color(4, 0, 0), new Color(3, 0, 0), new Color(2, 0, 0), new Color(1, 0, 0),
221                            new Color(0, 0, 0) };
222    
223            public static final Color[] defaultColors = { new Color(0, 0, 143), new Color(0, 0, 159), new Color(0, 0, 175),
224                            new Color(0, 0, 191), new Color(0, 0, 207), new Color(0, 0, 223), new Color(0, 0, 239),
225                            new Color(0, 0, 255), new Color(0, 16, 255), new Color(0, 32, 255), new Color(0, 48, 255),
226                            new Color(0, 64, 255), new Color(0, 80, 255), new Color(0, 96, 255), new Color(0, 112, 255),
227                            new Color(0, 128, 255), new Color(0, 143, 255), new Color(0, 159, 255), new Color(0, 175, 255),
228                            new Color(0, 191, 255), new Color(0, 207, 255), new Color(0, 223, 255), new Color(0, 239, 255),
229                            new Color(0, 255, 255), new Color(16, 255, 239), new Color(32, 255, 223), new Color(48, 255, 207),
230                            new Color(64, 255, 191), new Color(80, 255, 175), new Color(96, 255, 159), new Color(112, 255, 143),
231                            new Color(128, 255, 128), new Color(143, 255, 112), new Color(159, 255, 96), new Color(175, 255, 80),
232                            new Color(191, 255, 64), new Color(207, 255, 48), new Color(223, 255, 32), new Color(239, 255, 16),
233                            new Color(255, 255, 0), new Color(255, 239, 0), new Color(255, 223, 0), new Color(255, 207, 0),
234                            new Color(255, 191, 0), new Color(255, 175, 0), new Color(255, 159, 0), new Color(255, 143, 0),
235                            new Color(255, 128, 0), new Color(255, 112, 0), new Color(255, 96, 0), new Color(255, 80, 0),
236                            new Color(255, 64, 0), new Color(255, 48, 0), new Color(255, 32, 0), new Color(255, 16, 0),
237                            new Color(255, 0, 0), new Color(239, 0, 0), new Color(223, 0, 0), new Color(207, 0, 0),
238                            new Color(191, 0, 0), new Color(175, 0, 0), new Color(159, 0, 0), new Color(143, 0, 0),
239                            new Color(128, 0, 0) };
240    
241            public static final Color[] colorRedToMagenta = { new Color(255, 0, 0), new Color(255, 0, 1), new Color(255, 0, 2),
242                            new Color(255, 0, 3), new Color(255, 0, 4), new Color(255, 0, 5), new Color(255, 0, 6),
243                            new Color(255, 0, 7), new Color(255, 0, 8), new Color(255, 0, 9), new Color(255, 0, 10),
244                            new Color(255, 0, 11), new Color(255, 0, 12), new Color(255, 0, 13), new Color(255, 0, 14),
245                            new Color(255, 0, 15), new Color(255, 0, 16), new Color(255, 0, 17), new Color(255, 0, 18),
246                            new Color(255, 0, 19), new Color(255, 0, 20), new Color(255, 0, 21), new Color(255, 0, 22),
247                            new Color(255, 0, 23), new Color(255, 0, 24), new Color(255, 0, 25), new Color(255, 0, 26),
248                            new Color(255, 0, 27), new Color(255, 0, 28), new Color(255, 0, 29), new Color(255, 0, 30),
249                            new Color(255, 0, 31), new Color(255, 0, 32), new Color(255, 0, 33), new Color(255, 0, 34),
250                            new Color(255, 0, 35), new Color(255, 0, 36), new Color(255, 0, 37), new Color(255, 0, 38),
251                            new Color(255, 0, 39), new Color(255, 0, 40), new Color(255, 0, 41), new Color(255, 0, 42),
252                            new Color(255, 0, 43), new Color(255, 0, 44), new Color(255, 0, 45), new Color(255, 0, 46),
253                            new Color(255, 0, 47), new Color(255, 0, 48), new Color(255, 0, 49), new Color(255, 0, 50),
254                            new Color(255, 0, 51), new Color(255, 0, 52), new Color(255, 0, 53), new Color(255, 0, 54),
255                            new Color(255, 0, 55), new Color(255, 0, 56), new Color(255, 0, 57), new Color(255, 0, 58),
256                            new Color(255, 0, 59), new Color(255, 0, 60), new Color(255, 0, 61), new Color(255, 0, 62),
257                            new Color(255, 0, 63), new Color(255, 0, 64), new Color(255, 0, 65), new Color(255, 0, 66),
258                            new Color(255, 0, 67), new Color(255, 0, 68), new Color(255, 0, 69), new Color(255, 0, 70),
259                            new Color(255, 0, 71), new Color(255, 0, 72), new Color(255, 0, 73), new Color(255, 0, 74),
260                            new Color(255, 0, 75), new Color(255, 0, 76), new Color(255, 0, 77), new Color(255, 0, 78),
261                            new Color(255, 0, 79), new Color(255, 0, 80), new Color(255, 0, 81), new Color(255, 0, 82),
262                            new Color(255, 0, 83), new Color(255, 0, 84), new Color(255, 0, 85), new Color(255, 0, 86),
263                            new Color(255, 0, 87), new Color(255, 0, 88), new Color(255, 0, 89), new Color(255, 0, 90),
264                            new Color(255, 0, 91), new Color(255, 0, 92), new Color(255, 0, 93), new Color(255, 0, 94),
265                            new Color(255, 0, 95), new Color(255, 0, 96), new Color(255, 0, 97), new Color(255, 0, 98),
266                            new Color(255, 0, 99), new Color(255, 0, 100), new Color(255, 0, 101), new Color(255, 0, 102),
267                            new Color(255, 0, 103), new Color(255, 0, 104), new Color(255, 0, 105), new Color(255, 0, 106),
268                            new Color(255, 0, 107), new Color(255, 0, 108), new Color(255, 0, 109), new Color(255, 0, 110),
269                            new Color(255, 0, 111), new Color(255, 0, 112), new Color(255, 0, 113), new Color(255, 0, 114),
270                            new Color(255, 0, 115), new Color(255, 0, 116), new Color(255, 0, 117), new Color(255, 0, 118),
271                            new Color(255, 0, 119), new Color(255, 0, 120), new Color(255, 0, 121), new Color(255, 0, 122),
272                            new Color(255, 0, 123), new Color(255, 0, 124), new Color(255, 0, 125), new Color(255, 0, 126),
273                            new Color(255, 0, 127), new Color(255, 0, 128), new Color(255, 0, 129), new Color(255, 0, 130),
274                            new Color(255, 0, 131), new Color(255, 0, 132), new Color(255, 0, 133), new Color(255, 0, 134),
275                            new Color(255, 0, 135), new Color(255, 0, 136), new Color(255, 0, 137), new Color(255, 0, 138),
276                            new Color(255, 0, 139), new Color(255, 0, 140), new Color(255, 0, 141), new Color(255, 0, 142),
277                            new Color(255, 0, 143), new Color(255, 0, 144), new Color(255, 0, 145), new Color(255, 0, 146),
278                            new Color(255, 0, 147), new Color(255, 0, 148), new Color(255, 0, 149), new Color(255, 0, 150),
279                            new Color(255, 0, 151), new Color(255, 0, 152), new Color(255, 0, 153), new Color(255, 0, 154),
280                            new Color(255, 0, 155), new Color(255, 0, 156), new Color(255, 0, 157), new Color(255, 0, 158),
281                            new Color(255, 0, 159), new Color(255, 0, 160), new Color(255, 0, 161), new Color(255, 0, 162),
282                            new Color(255, 0, 163), new Color(255, 0, 164), new Color(255, 0, 165), new Color(255, 0, 166),
283                            new Color(255, 0, 167), new Color(255, 0, 168), new Color(255, 0, 169), new Color(255, 0, 170),
284                            new Color(255, 0, 171), new Color(255, 0, 172), new Color(255, 0, 173), new Color(255, 0, 174),
285                            new Color(255, 0, 175), new Color(255, 0, 176), new Color(255, 0, 177), new Color(255, 0, 178),
286                            new Color(255, 0, 179), new Color(255, 0, 180), new Color(255, 0, 181), new Color(255, 0, 182),
287                            new Color(255, 0, 183), new Color(255, 0, 184), new Color(255, 0, 185), new Color(255, 0, 186),
288                            new Color(255, 0, 187), new Color(255, 0, 188), new Color(255, 0, 189), new Color(255, 0, 190),
289                            new Color(255, 0, 191), new Color(255, 0, 192), new Color(255, 0, 193), new Color(255, 0, 194),
290                            new Color(255, 0, 195), new Color(255, 0, 196), new Color(255, 0, 197), new Color(255, 0, 198),
291                            new Color(255, 0, 199), new Color(255, 0, 200), new Color(255, 0, 201), new Color(255, 0, 202),
292                            new Color(255, 0, 203), new Color(255, 0, 204), new Color(255, 0, 205), new Color(255, 0, 206),
293                            new Color(255, 0, 207), new Color(255, 0, 208), new Color(255, 0, 209), new Color(255, 0, 210),
294                            new Color(255, 0, 211), new Color(255, 0, 212), new Color(255, 0, 213), new Color(255, 0, 214),
295                            new Color(255, 0, 215), new Color(255, 0, 216), new Color(255, 0, 217), new Color(255, 0, 218),
296                            new Color(255, 0, 219), new Color(255, 0, 220), new Color(255, 0, 221), new Color(255, 0, 222),
297                            new Color(255, 0, 223), new Color(255, 0, 224), new Color(255, 0, 225), new Color(255, 0, 226),
298                            new Color(255, 0, 227), new Color(255, 0, 228), new Color(255, 0, 229), new Color(255, 0, 230),
299                            new Color(255, 0, 231), new Color(255, 0, 232), new Color(255, 0, 233), new Color(255, 0, 234),
300                            new Color(255, 0, 235), new Color(255, 0, 236), new Color(255, 0, 237), new Color(255, 0, 238),
301                            new Color(255, 0, 239), new Color(255, 0, 240), new Color(255, 0, 241), new Color(255, 0, 242),
302                            new Color(255, 0, 243), new Color(255, 0, 244), new Color(255, 0, 245), new Color(255, 0, 246),
303                            new Color(255, 0, 247), new Color(255, 0, 248), new Color(255, 0, 249), new Color(255, 0, 250),
304                            new Color(255, 0, 251), new Color(255, 0, 252), new Color(255, 0, 253), new Color(255, 0, 254),
305                            new Color(255, 0, 255) };
306    
307            public static final ColorMap DEFAULT = new ColorMap(defaultColors);
308    
309            public static final ColorMap BLACKTORED = BLACKTORED();
310    
311            public static final ColorMap REDTOBLACK = BLACKTORED().reverse();
312    
313            public static final ColorMap BLACKTOGREEN = BLACKTOGREEN();
314    
315            public static final ColorMap GREENTOBLACK = BLACKTOGREEN().reverse();
316    
317            private static final ColorMap BLACKTORED() {
318                    List<Color> c = new ArrayList<Color>(256);
319                    for (int i = 0; i < 256; i++) {
320                            c.add(new Color(i, 0, 0));
321                    }
322                    return new ColorMap(c);
323            }
324    
325            private static final ColorMap BLACKTOGREEN() {
326                    List<Color> c = new ArrayList<Color>(256);
327                    for (int i = 0; i < 256; i++) {
328                            c.add(new Color(0, i, 0));
329                    }
330                    return new ColorMap(c);
331            }
332    
333            private ColorMap(List<Color> colors) {
334                    this.colors = colors;
335            }
336    
337            public ColorMap(Color... colors) {
338                    this.colors = Arrays.asList(colors);
339            }
340    
341            public int size() {
342                    return colors.size();
343            }
344    
345            public Color get(int index) {
346                    index = index < 0 ? 0 : index;
347                    index = index >= colors.size() ? colors.size() - 1 : index;
348                    return colors.get(index);
349            }
350    
351            public void set(int index, Color color) {
352                    index = index < 0 ? 0 : index;
353                    index = index >= colors.size() ? colors.size() - 1 : index;
354                    colors.set(index, color);
355            }
356    
357            public ColorMap reverse() {
358                    List<Color> reversedColors = new ArrayList<Color>(colors);
359                    return new ColorMap(reversedColors);
360            }
361    
362            public ColorMap smallerSize(int everyNth) {
363                    List<Color> newColors = new ArrayList<Color>(colors.size() / everyNth);
364                    for (int i = 0; i < colors.size(); i += everyNth) {
365                            newColors.add(colors.get(i));
366                    }
367                    return new ColorMap(newColors);
368            }
369    
370    }