package com.example.jmacro.wjdr.util;

import java.awt.image.BufferedImage;
import java.io.File;

public class ColorUtil {

    /**
     * 计算两个颜色的相似度
     *
     * @param colorInt1 颜色1
     * @param colorInt2 颜色2
     * @return
     */
    public static double calculateSimilarity(int colorInt1, int colorInt2) {
        // 计算RGB各分量的平方差
        int[] color1 = {(colorInt1 >> 16) & 0xFF, (colorInt1 >> 8) & 0xFF, colorInt1 & 0xFF};
        int[] color2 = {(colorInt2 >> 16) & 0xFF, (colorInt2 >> 8) & 0xFF, colorInt2 & 0xFF};
        int diffR = (color1[0] - color2[0]) * (color1[0] - color2[0]);
        int diffG = (color1[1] - color2[1]) * (color1[1] - color2[1]);
        int diffB = (color1[2] - color2[2]) * (color1[2] - color2[2]);

        // 计算欧氏距离
        double distance = Math.sqrt(diffR + diffG + diffB);

        // 计算两个颜色之间的相似度（距离越小，相似度越高）
        return 1 - distance / Math.sqrt(3 * 255 * 255);
    }

    public static boolean isSimilar(int colorInt1, int colorInt2) {
        // 透明色认为相似
        if ((colorInt1>>24 & 0xff )== 0) {
            return true;
        }
        // 图例中的透明色认为相似
        if ((colorInt2>>24 & 0xff )== 0) {
            return true;
        }
        return calculateSimilarity(colorInt1, colorInt2) > 0.95d;
    }

    public static void main(String[] args) {

//        BufferedImage legend = Imager.load(new File("legend", "未标题-1.png"));
//        int[][] imageRGB = Imager.getImageRGB(legend);
//        for (int[] ints : imageRGB) {
//
//            for (int anInt : ints) {
//
//                int alpha = anInt>>24 & 0xff;
//                System.out.println("alpha="+alpha);
//                System.out.println(Integer.toHexString(anInt));
//            }
//        }
//
//        int color1 = 0xffffff; // 白色
//        int color2 = 0xfefefe; // 非常接近白色的颜色
//
//        double similarity = calculateSimilarity(color1, color2);
//        System.out.println("Similarity: " + similarity); // 输出相似度
    }
}
