- Баллы
- 173
У меня есть Color (Простой, а не из баккита). Как его сконвертировать в CharColor, чтобы хоть немного было похоже?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Что значит "сконвертировать" - есть определённый набор цвето с которыми придётся жить и мириться, обычных методов для вставки других цветов я не наблюдаю, поэтому просто на глазок сам определяй - к чему этот цвет больше подходит.У меня есть Color (Простой, а не из баккита). Как его сконвертировать в CharColor, чтобы хоть немного было похоже?
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];
}
http://algolist.manual.ru/graphics/find_col.phpВот такое будет работать?Код: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]; }
Я использую это:
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;
}
Я тебе дал алгоритм, я не взять и протестировать насколко он правилен и функционален.Я использую это:
Так будет работать?Код: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; }
Хорошо, спасибо.Я тебе дал алгоритм, я не взять и протестировать насколко он правилен и функционален.
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;
}
Возьми и протестриуй, напиши несколько юнит тестов, сделай какую-нить графическую утилитку и смотри.Хорошо, спасибо.
Получается:
Так?Код: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; }