代码之家  ›  专栏  ›  技术社区  ›  FarazFiroz

如何将argb转换为描述性文本颜色

  •  2
  • FarazFiroz  · 技术社区  · 5 月前

    大家好。 我正在进行一个项目,我想将argb值转换为描述性文本颜色并显示给用户。

    我正在使用调色板api从图像中提取argb颜色,我想将其转换为描述性文本颜色,但我不知道如何做到这一点。有人能帮我吗。我尝试给出预定义的值,但没有得到预期的结果。我想知道是否有任何api或库可以做到这一点,或者有任何替代方法。

    Palette palette = Palette.from(bitmap).generate(); 
    
    binding.colour.setText(argbToTextColor(palette.getDominantColor(0)));
    
    
    public String argbToTextColor(int argb) {
            int rgb = argb & 0x00FFFFFF;
            int red = (rgb >> 16) & 0xFF;
            int green = (rgb >> 8) & 0xFF;
            int blue = rgb & 0xFF;
    
            if (red < 50 && green < 50 && blue < 50) {
                return "Black";
            } else if (red > 200 && green > 200 && blue > 200) {
                return "White";
            } else if (red > green && red > blue) {
                return "Red";
            } else if (green > red && green > blue) {
                return "Green";
            } else if (blue > red && blue > green) {
                return "Blue";
            } else if (red > 200 && green > 200) {
                return "Yellow";
            } else if (red > 200 && blue > 200) {
                return "Magenta";
            } else if (green > 200 && blue > 200) {
                return "Cyan";
            } else if (red > 150 && green > 100 && blue < 50) {
                return "Orange";  
            } else if (red < 100 && green < 100 && blue < 100) {
                return "Gray";  
            } else if (red > 150 && green > 50 && blue > 150) {
                return "Purple";
            } else if (red < 100 && green < 100 && blue > 150) {
                return "Pink";  
            } else if (red > 100 && green > 50 && blue < 50) {
                return "Brown"; 
            } else {
                return "Unknown Color";
            }
        }
    
    
    1 回复  |  直到 5 月前
        1
  •  2
  •   dmortal    5 月前

    在C#中有一个表 known colors ,但有140个,还有一个图书馆 Color Names with 30261 of them ,但用透明度和256^3值(16777216)覆盖所有变体不太可能奏效。

        2
  •  0
  •   dev.bmax    5 月前

    由于颜色值比名称多得多(正如另一个答案中所说),你能做的最好的事情可能是:

    1. 制作一个已知颜色表(例如基于 this )
    2. 选择 color distance 最适合您用例的度量
    3. 找到与给定颜色值距离最小的已知颜色[*]

    [*]为了高效搜索,您可能需要使用 vector database .