Рисование заполненного прямоугольника над BufferedImage

Итак, я пытаюсь создать приложение, которое может отсекать разделы опроса, содержащие конфиденциальную информацию. Однако я столкнулся с некоторой проблемой.

То, что я хочу сделать, это рисовать заполненные черные прямоугольники над BufferedImage, заданные x, y, width и height желаемой области, чтобы затемнить, а затем записать это новое изображение обратно в мою файловую систему. Вот мой код.

        File imageFile = new File("images/template.jpg");
        BufferedImage img = ImageIO.read(imageFile);

        Graphics2D graph = img.createGraphics();
        graph.setColor(Color.BLACK);
        graph.fill(new Rectangle(x, y, width, height));
        graph.dispose();

        ImageIO.write(img, "jpg", new File("images/template.jpg"));

По какой-либо причине изображение в ресурсе не изменяется после этого сегмента кода. Любые идеи о том, что я делаю неправильно?

Ответ 1

Убедитесь, что ваши x, y и ширина, высота действительно попадают в размеры изображения. Вероятно, вы рисуете где-то за пределами границ изображения. Шаг в режиме отладки для проверки или println() переменных и т.д.

Ответ 2

Я знаю, это старый вопрос, но, возможно, он может быть полезен кому-то, Я думаю, вы используете этот

graph.drawImage(x,y,width,height); //First you draw the image
graph.setColor(Color.black); //Then set the color to black
graph.fillRect(img.getX(), img.getY(), img.getWidth(), img.getHeight());// Finally draw a black rectangle on it

Кстати, сложно найти решение без кода. Надеюсь, это будет полезно.

Ответ 3

Очень поздно, но вы сохраняете изображение, а не тот график, который вы создаете. Я думаю, что это должно быть BufferedImage снова, чтобы сохранить

Ответ 4

Вам нужно только заменить эту строку:

Graphics2D graph = img.createGraphics();

с этим:

Graphics2D graph = img.getGraphics();