Ответ 1
Убедитесь, что ваши x, y и ширина, высота действительно попадают в размеры изображения. Вероятно, вы рисуете где-то за пределами границ изображения. Шаг в режиме отладки для проверки или println() переменных и т.д.
Итак, я пытаюсь создать приложение, которое может отсекать разделы опроса, содержащие конфиденциальную информацию. Однако я столкнулся с некоторой проблемой.
То, что я хочу сделать, это рисовать заполненные черные прямоугольники над 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"));
По какой-либо причине изображение в ресурсе не изменяется после этого сегмента кода. Любые идеи о том, что я делаю неправильно?
Убедитесь, что ваши x, y и ширина, высота действительно попадают в размеры изображения. Вероятно, вы рисуете где-то за пределами границ изображения. Шаг в режиме отладки для проверки или println() переменных и т.д.
Я знаю, это старый вопрос, но, возможно, он может быть полезен кому-то, Я думаю, вы используете этот
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
Кстати, сложно найти решение без кода. Надеюсь, это будет полезно.
Очень поздно, но вы сохраняете изображение, а не тот график, который вы создаете. Я думаю, что это должно быть BufferedImage снова, чтобы сохранить
Вам нужно только заменить эту строку:
Graphics2D graph = img.createGraphics();
с этим:
Graphics2D graph = img.getGraphics();