Supondo que sua imagem é um objeto do tipo BufferedImage e que você tem um objeto do tipo Rectangle que representa o quadro do qual você quer calcular a tonalidade.
Você pode obter um objeto BufferedImage correspondente à esse quadro da seguinte forma:
BufferedImage selecao = imagem.getSubimage(quadro.x, quadro.y, quadro.width, quadro.height);
Agora que você tem um objeto correspondente à área da qual quer computar a tonalidade, você pode calcular dessa forma: Color tonalidade = getTonalidade(selecao);
Abaixo está a implementação do método getTonalidade, se você observar o código, esse método obtém os pixels do quadro selecionado através do método getPixels e em seguida calcula a tonalidade, que nada mais é do que a média dos pixels do quadro selecionado:
Método getTonalidade:
private Color getTonalidade(BufferedImage imagem) {
int[] pixels = getPixels(imagem);
int r = 0;
int g = 0;
int b = 0;
int count = pixels.length;
for (int i = 0; i < count; i++) {
Color cor = new Color(pixels[i]);
r += cor.getRed();
g += cor.getGreen();
b += cor.getBlue();
}
r /= count;
g /= count;
b /= count;
return new Color(r, g, b);
}
Método getPixels:
private int[] getPixels(BufferedImage imagem) {
int width = imagem.getWidth();
int height = imagem.getHeight();
int size = width * height;
PixelGrabber pixelGrabber = new PixelGrabber(imagem, 0, 0, width, height, new int[size], 0, width);
pixelGrabber.startGrabbing();
return (int[]) pixelGrabber.getPixels();
}