Используйте RescaleOp для исходного изображения и субизображений. Учитывая, что у вас есть буферизованное изображение (называемое biDest), которое содержит изображение, вызовите RescaleOp (0.6, 0, null), чтобы сделать его темнее. Затем, чтобы добавить (прямоугольный) прожектор, вызовите следующее:
public void spotLight(int x, int y, int w, int h)
{
BufferedImage i = biDest.getSubimage(x, y, w, h);
RescaleOp rescale = new RescaleOp(SPOTLIGHT_BRIGHTNESS, 0, null);
rescale.filter(i, i);
repaint();
}