Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice
  1. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    У меня есть Color (Простой, а не из баккита). Как его сконвертировать в CharColor, чтобы хоть немного было похоже?
     
  2. Хостинг MineCraft
    <
  3. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    Что значит "сконвертировать" - есть определённый набор цвето с которыми придётся жить и мириться, обычных методов для вставки других цветов я не наблюдаю, поэтому просто на глазок сам определяй - к чему этот цвет больше подходит.
     
  4. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Code:
        Color[] colors = {
                new Color(0, 0, 0),
                new Color(0, 0, 170),
                new Color(0, 170, 0),
                new Color(0, 170, 170),
                new Color(170, 0, 0),
                new Color(170, 0, 170),
                new Color(255, 170, 0),
                new Color(170, 170, 170),
                new Color(85, 85, 85),
                new Color(85, 85, 255),
                new Color(85, 255, 85),
                new Color(85, 255, 255),
                new Color(255, 85, 85),
                new Color(255, 85, 255),
                new Color(255, 255, 85),
                new Color(255, 255, 255)
            };
     
        private ChatColor colorToChatColor(Color color){
            if(color.getAlpha() < 128) return ChatColor.WHITE;
           
            int best = -1;
            int index = 0;
           
            for(int i = 0; i < 16; i++) {
                 
                double distance = getDistance(color, colors[i]);
               
                if (distance < best || best == -1) {
                    best = (int) distance;
                    index = i;
                }
            }
            return ChatColor.values()[index];
        }
    
    Вот такое будет работать?
     
    Last edited: May 18, 2014
    HoShiMin likes this.
  5. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    http://algolist.manual.ru/graphics/find_col.php
     
  6. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Я использую это:
    Code:
        private double getDistance(Color c1, Color c2) {
            double rmean = (c1.getRed() + c2.getRed()) / 2.0;
            double r = c1.getRed() - c2.getRed();
            double g = c1.getGreen() - c2.getGreen();
            int b = c1.getBlue() - c2.getBlue();
    
            double weightR = 2 + rmean / 256.0;
            double weightG = 4.0;
            double weightB = 2 + (255 - rmean) / 256.0;
    
            return weightR * r * r + weightG * g * g + weightB * b * b;
        }
    Так будет работать?
     
  7. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    Я тебе дал алгоритм, я не взять и протестировать насколко он правилен и функционален.
     
  8. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Хорошо, спасибо.[DOUBLEPOST=1400438683,1400438303][/DOUBLEPOST]Получается:
    Code:
        private double getDistance(Color c1, Color c2){
            int r, g, b;
          
            r = c2.getRed() - c1.getRed();
            g = c2.getGreen() - c1.getGreen();
            b = c2.getBlue() - c1.getBlue();
          
            return 60 * r + 118 * g +  22 * b;
        }
    Так?
     
  9. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    Возьми и протестриуй, напиши несколько юнит тестов, сделай какую-нить графическую утилитку и смотри.
     

Share This Page