Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.Color;
- import java.util.HashMap;
- import java.util.Map.Entry;
- /**
- *
- * @author ECB2 (ECB2.biz)
- *
- */
- public class ColorUtil {
- private static HashMap<Integer,Color> mapColors;
- public static void init()
- {
- final Color[] BaseMapColors = new Color[]
- {
- new Color(0, 0, 0, 0),
- new Color(127, 178, 56),
- new Color(247, 233, 163),
- new Color(167, 167, 167),
- new Color(255, 0, 0),
- new Color(160, 160, 255),
- new Color(167, 167, 167),
- new Color(0, 124, 0),
- new Color(255, 255, 255),
- new Color(164, 168, 184),
- new Color(183, 106, 47),
- new Color(112, 112, 112),
- new Color(64, 64, 255),
- new Color(104, 83, 50),
- new Color(255, 252, 245),
- new Color(216, 127, 51),
- new Color(178, 76, 216),
- new Color(102, 153, 216),
- new Color(229, 229, 51),
- new Color(127, 204, 25),
- new Color(242, 127, 165),
- new Color(76, 76, 76),
- new Color(153, 153, 153),
- new Color(76, 127, 153),
- new Color(127, 63, 178),
- new Color(51, 76, 178),
- new Color(102, 76, 51),
- new Color(102, 127, 51),
- new Color(153, 51, 51),
- new Color(25, 25, 25),
- new Color(250, 238, 77),
- new Color(92, 219, 213),
- new Color(74, 128, 255),
- new Color(0, 217, 58),
- new Color(21, 20, 31),
- new Color(112, 2, 0)
- };
- mapColors = new HashMap<Integer,Color>();
- for(int i = 0; i < BaseMapColors.length; ++i)
- {
- Color bc = BaseMapColors[i];
- mapColors.put(i*4 +0,new Color((int)(bc.getRed()*180.0/255.0+0.5), (int)(bc.getGreen()*180.0/255.0+0.5), (int)(bc.getBlue()*180.0/255.0+0.5), bc.getAlpha()));
- mapColors.put(i*4 +1,new Color((int)(bc.getRed()*220.0/255.0+0.5), (int)(bc.getGreen()*220.0/255.0+0.5), (int)(bc.getBlue()*220.0/255.0+0.5), bc.getAlpha()));
- mapColors.put(i*4 +2,bc);
- mapColors.put(i*4 +3,new Color((int)(bc.getRed()*135.0/255.0+0.5), (int)(bc.getGreen()*135.0/255.0+0.5), (int)(bc.getBlue()*135.0/255.0+0.5), bc.getAlpha()));
- }
- }
- private static double colorDiff(Color c1, Color c2)
- {
- double r1 = c1.getRed();
- double g1 = c1.getGreen();
- double b1 = c1.getBlue();
- double r2 = c2.getRed();
- double g2 = c2.getGreen();
- double b2 = c2.getBlue();
- double distance = (r2 - r1)*(r2 - r1) + (g2 - g1)*(g2 - g1) + (b2 - b1)*(b2 - b1);
- return distance;
- }
- public static Color getClosestColor(Color c)
- {
- Color out = new Color(0,0,0);
- double lastDistance = Double.MAX_VALUE;
- for(Entry<Integer,Color> e:mapColors.entrySet())
- {
- Color curColor = e.getValue();
- double diff = colorDiff(curColor,c);
- if(lastDistance > diff){
- lastDistance = diff;
- out = curColor;
- }
- }
- return out;
- }
- public static int findId(Color c)
- {
- Color closest = getClosestColor(c);
- return getId(closest);
- }
- public static int getId(Color c)
- {
- byte id = (byte)0;
- for(Entry<Integer,Color> e:mapColors.entrySet())
- {
- if(e.getValue().equals(c)) id = (byte)(int)e.getKey();
- //break;
- }
- int unsigned = id & (0xff);
- return unsigned;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement