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

Color в ChatColor

Тема в разделе "Разработка плагинов для новичков", создана пользователем serega6531, 18 май 2014.

  1. Автор темы
    serega6531

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

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

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

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

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

    Баллы:
    173
    Skype:
    shkurovs
    Код:
        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];
        }
    
    Вот такое будет работать?
     
    Последнее редактирование: 18 май 2014
    HoShiMin нравится это.
  5. ptnk

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

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

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

    Баллы:
    173
    Skype:
    shkurovs
    Я использую это:
    Код:
        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 Старожил Пользователь

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

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

    Баллы:
    173
    Skype:
    shkurovs
    Хорошо, спасибо.[DOUBLEPOST=1400438683,1400438303][/DOUBLEPOST]Получается:
    Код:
        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 Старожил Пользователь

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

Поделиться этой страницей