Java BufferedImage устанавливает новый размер

Я использую BufferedImage для отображения одного изображения. Я изменяю данные изображения, получая данные о пикселях из getRaster() и изменяя их. Это прекрасно работает, если я изменяю только значения пикселей, но если я изменяю размер (ширину/высоту) массива данных пикселей, новый BufferedImage не изменит размер.

Вот код:

bufferedImage = new BufferedImage(img.width, img.height, bufferedImage.getType());
bufferedImage.getRaster().setDataElements(0, 0,  img.width, img.height, img.pixels);

Что еще мне нужно сделать, чтобы bufferedImagesize изменился?

Например, если я оставлю массив пикселей неизменным и просто поменяю местами ширину/высоту (поэтому длина пикселей одинакова), изображение не изменится.


person XCS    schedule 08.05.2015    source источник
comment
Можете ли вы опубликовать фрагмент кода, демонстрирующий проблему? Я не понимаю из текущего фрагмента, что происходит не так. Если вы создадите изображение, подобное new BufferedImage(height, width, ...) и setDataElement(0, 0, height, width, ...), то результирующее изображение наверняка будет выглядеть иначе, чем если бы вы сделали (width, height, ...).   -  person Erwin Bolwidt    schedule 09.05.2015
comment
Приведенный выше код - это то, что я использую. Проблема в том, что исходный BufferedImage имел другую ширину и высоту, и когда я повторно создаю буферизованное изображение, оно не работает, если оно имеет другой размер. Я думаю, что это не из-за этого, а из-за того, что его контейнер (ImageIcon и JLabel) не применяет обновление размера.   -  person XCS    schedule 09.05.2015
comment
Проблема в том, что код, который вы разместили, не демонстрирует проблему. Не компилируется/не запускается. Лучше всего сделать небольшой фрагмент кода, который запускается и демонстрирует вашу проблему, иначе я сомневаюсь, что люди смогут ответить на ваш вопрос.   -  person Erwin Bolwidt    schedule 10.05.2015


Ответы (1)


Я думаю, что создание из него нового BufferedImage должно работать:

BufferedImage nImg = new BufferedImage(nW, nH, bufferedImage.getType());

Graphics2D g2d = nImg.createGraphics();
g2d.drawImage(bufferedImage, 0, 0, null);
g2d.dispose();
person FuRioN    schedule 08.05.2015
comment
Вы объявляете, но не используете temp выше. Я не хочу использовать какие-либо ненужные функции для масштабирования, так как все, что я хочу сделать, это установить данные bufferedImage в img.pixels[]. - person XCS; 08.05.2015
comment
Да, я забыл нарисовать новую картинку. Если вы хотите только изменить размер без масштабирования, вы можете пропустить часть масштабирования и использовать свое старое изображение. Я отредактировал свой ответ. - person FuRioN; 08.05.2015