Оператор приведения имеет более высокий приоритет, чем оператор умножения. Поэтому ваши вычисления для значений or
, ..., nb
компилируются в тот же байт-код, что и этот код:
int ob = ((int) oldColor.getBlue()) * 255;
int or = ((int) oldColor.getRed()) * 255;
int og = ((int) oldColor.getGreen()) * 255;
int nb = ((int) newColor.getBlue()) * 255;
int nr = ((int) newColor.getRed()) * 255;
int ng = ((int) newColor.getGreen()) * 255;
Просто добавьте скобки, чтобы указать java выполнить умножение перед приведением. В противном случае в качестве результата вы получите только значения 0 или 255.
int ob = (int) (oldColor.getBlue() * 255);
int or = (int) (oldColor.getRed() * 255);
int og = (int) (oldColor.getGreen() * 255);
int nb = (int) (newColor.getBlue() * 255);
int nr = (int) (newColor.getRed() * 255);
int ng = (int) (newColor.getGreen() * 255);