Что происходит в методе convert() класса ColorSchema?
Всем привет!
public class ColorSchema implements TextColorSchema {
private char[] arr = {'#', '$', '@', '%', '*', '+', '-', '\''};
@Override
public char convert(int color) {
final int count = 256 / arr.length;
return arr[(color / count)];
}
}
Логика такова, что программе передают изображение: если интенсивность белого цвета ближе к 0, то выбирается символ arr[0], если ближе к 255 - то arr[length].
Я плохо разбираюсь в передаче изображений в программу, поэтому хочу разобраться: что за count получает автор, как и что тут происходит?
256 — это количество символов ASCII. Почему оно делится на длину текущего массива? Что за цифры передаются в color?
Что можете посоветовать почитать по этому поводу, не слишком углубляясь в эту тему?
Ответы (1 шт):
В данном случае 256 не связано с количеством символов ASCII, а относится скорее к количеству градаций цвета в упомянутом диапазоне [0, 255].
То есть метод convert принимает значение цвета color из данного диапазона.
Переменная count определяет длину поддиапазона, который приходится на один символ, отвечающий за цвет. В данном случае это значение составит 256 / 8 = 32. В конце вычисляется символ, соответствующий цвету:
color ∊ [ 0, 31] -> arr[0] -> '#'- чёрныйcolor ∊ [ 32, 63] -> arr[1] -> '$'
...color ∊ [224, 255] -> arr[7] -> '\''- белый
Если color выйдет за пределы диапазона [0, 255], произойдёт выход за пределы массива и будет выброшено соответствущее исключение.
Следует заметить, что и переменную count и массив символов arr можно было определить как константы на уровне класса.
public class ColorSchema implements TextColorSchema {
private static final char[] COLORS = {'#', '$', '@', '%', '*', '+', '-', '\''};
private static final int COLOR_COUNT = 256 / COLORS.length;
@Override
public char convert(int color) {
return COLORS[color / COLOR_COUNT];
}
}