Ответ 1
Вы можете попробовать перечислить возможные значения цвета RGB
и подготовить HashSet
содержащий только те значения цвета, которые не должны быть ненасыщенными. Кажется, что не должно быть много значений.
После этого вы сможете проверить, должен ли цвет быть ненасыщенным или нет. Таким образом, вы получите довольно долгий предварительный расчет для нового заданного цвета, но ваш код, который преобразует фотографию, станет быстрее.
Он может быть реализован так (не тестировал его под Android
, просто какой-то псевдокод Java
чтобы показать эту идею):
// precalculation
Set<Color> keptColors = new HashSet<Color>();
final int MAX_DISTANCE = 4;
for (int r=red(fromColor)-MAX_DISTANCE; r<=red(fromColor)+MAX_DISTANCE; r++) {
for (int g=green(fromColor)-MAX_DISTANCE; g<=green(fromColor)+MAX_DISTANCE; g++) {
for (int b=blue(fromColor)-MAX_DISTANCE; b<=blue(fromColor)+MAX_DISTANCE; b++) {
if (Distance(rgb(r,g,b)), fromColor) < MAX_DISTANCE {
keptColors.add(rgb(r,g,b));
}
}
}
}
...
// in you photo processing code
keptColors.contains(pixels[x]) ? pixels[x] : targetColor;