2010-03-06 1 views
0

Я изменил размер изображения с использованием класса Java2D Graphics. Но это выглядит не так.Изменение размера изображения ухудшается по качеству

BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type); 
    Graphics2D g = resizedImage.createGraphics(); 
    g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); 
    g.dispose(); 

Возможно ли масштабировать изображение без введения артефактов?

+0

Дубликат http://stackoverflow.com/questions/543130/java-2d-resize? –

ответ

1

Графика растрового изображения не хорошо масштабируется, вообще говоря. Деградация особенно заметна, когда вы увеличиваете размер изображения, но даже уменьшение масштаба может привести к нежелательным артефактам, особенно если не масштабировать по интегральным факторам.

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

* Обратите внимание, что векторная графика не является вариантом для фотографий и тому подобного.

0

Этот article by Chris Campbell содержит подробную информацию о масштабировании изображений с помощью Java2D.

Существует ряд вариантов, которые можно использовать в отношении качества масштабирования, где, как правило, лучше качество, чем больше масштабирование (соотношение производительности и качества).

Информация в статье, вероятно, поможет улучшить масштабирование, но, как говорит в своем ответе @Kevin, в конце концов никакое масштабирование не будет абсолютно идеальным.

0

Вы можете посмотреть в библиотеке java-image-scaling. С помощью быстрого теста он создавал более качественное изображение с уменьшенным масштабированием, чем с использованием стандартных инструментов Java2D/AWT.