12cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/* 22cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Copyright (C) 2013 The Android Open Source Project 32cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * 42cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Licensed under the Apache License, Version 2.0 (the "License"); 52cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * you may not use this file except in compliance with the License. 62cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * You may obtain a copy of the License at 72cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * 82cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * http://www.apache.org/licenses/LICENSE-2.0 92cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * 102cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Unless required by applicable law or agreed to in writing, software 112cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * distributed under the License is distributed on an "AS IS" BASIS, 122cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * See the License for the specific language governing permissions and 142cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * limitations under the License. 152cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */ 162cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 172cfe25aefb32ed215f1c661d9670baf276fb7776James Kungpackage com.android.colorpicker; 182cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 192cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.graphics.Color; 202cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 212cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport java.util.Comparator; 222cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 232cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/** 242cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * A color comparator which compares based on hue, saturation, and value. 252cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */ 262cfe25aefb32ed215f1c661d9670baf276fb7776James Kungpublic class HsvColorComparator implements Comparator<Integer> { 272cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 282cfe25aefb32ed215f1c661d9670baf276fb7776James Kung @Override 292cfe25aefb32ed215f1c661d9670baf276fb7776James Kung public int compare(Integer lhs, Integer rhs) { 302cfe25aefb32ed215f1c661d9670baf276fb7776James Kung float[] hsv = new float[3]; 312cfe25aefb32ed215f1c661d9670baf276fb7776James Kung Color.colorToHSV(lhs, hsv); 322cfe25aefb32ed215f1c661d9670baf276fb7776James Kung float hue1 = hsv[0]; 332cfe25aefb32ed215f1c661d9670baf276fb7776James Kung float sat1 = hsv[1]; 342cfe25aefb32ed215f1c661d9670baf276fb7776James Kung float val1 = hsv[2]; 352cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 362cfe25aefb32ed215f1c661d9670baf276fb7776James Kung float[] hsv2 = new float[3]; 372cfe25aefb32ed215f1c661d9670baf276fb7776James Kung Color.colorToHSV(rhs, hsv2); 382cfe25aefb32ed215f1c661d9670baf276fb7776James Kung float hue2 = hsv2[0]; 392cfe25aefb32ed215f1c661d9670baf276fb7776James Kung float sat2 = hsv2[1]; 402cfe25aefb32ed215f1c661d9670baf276fb7776James Kung float val2 = hsv2[2]; 412cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 422cfe25aefb32ed215f1c661d9670baf276fb7776James Kung if (hue1 < hue2) { 432cfe25aefb32ed215f1c661d9670baf276fb7776James Kung return 1; 442cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } else if (hue1 > hue2) { 452cfe25aefb32ed215f1c661d9670baf276fb7776James Kung return -1; 462cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } else { 472cfe25aefb32ed215f1c661d9670baf276fb7776James Kung if (sat1 < sat2) { 482cfe25aefb32ed215f1c661d9670baf276fb7776James Kung return 1; 492cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } else if (sat1 > sat2) { 502cfe25aefb32ed215f1c661d9670baf276fb7776James Kung return -1; 512cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } else { 522cfe25aefb32ed215f1c661d9670baf276fb7776James Kung if (val1 < val2) { 532cfe25aefb32ed215f1c661d9670baf276fb7776James Kung return 1; 542cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } else if (val1 > val2) { 552cfe25aefb32ed215f1c661d9670baf276fb7776James Kung return -1; 562cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 572cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 582cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 592cfe25aefb32ed215f1c661d9670baf276fb7776James Kung return 0; 602cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 612cfe25aefb32ed215f1c661d9670baf276fb7776James Kung} 62