Класс BufferedImage имеет метод int getRGB(int x, int y)
, который возвращает шестнадцатеричное целое число, представляющее цвет пикселя в точке (x, y) (и другой метод, который возвращает матрицу пикселей). Отсюда вы можете получить значения r, g и b следующим образом:
int r = (0x00ff0000 & rgb) >> 16;
int g = (0x0000ff00 & rgb) >> 8;
int b = (0x000000ff & rgb);
и затем проверьте, все ли они равны для каждого пикселя изображения. Если r == g == b для каждого пикселя, то это в серой шкале.
Это первое, что приходит на ум. Я не уверен, будет ли установлен какой-либо флаг серой шкалы при чтении изображения.