2010-10-25 2 views
1

У меня есть куча 48x48 изображений, в которых мне нужны 16x16 версии, и вместо того, чтобы хранить версии 16x16, я хочу изменить их на лету. Мой текущий код выглядит следующим образом (model.icon() возвращает 48x48 изображение):Как изменить размер изображения с помощью Java?

Icon icon = model.icon(); 
Image image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB); 
return new ImageIcon(image.getScaledInstance(16, 16, Image.SCALE_AREA_AVERAGING)); 

К сожалению, когда этот код выполняется, получает 16x16 черный квадрат вместо картинки.

ответ

4

Попробуйте это.

ImageIcon icon = model.icon(); 
Image image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB); 
image.getGraphics().drawImage(icon.getImage(), 0, 0, 16, 16, null); 
return new ImageIcon(image); 
+0

Ах, ха! Благодаря! Это оно! –

+0

Er, единственная проблема заключается в том, что 'Graphics.drawImage()' принимает 'Image' вместо' Icon'. –

+0

Да, вы правы - я только что обновил свой код - вам нужно вызвать icon.getImage(), как вы, вероятно, поняли из ответа andrewmu :) – William

3

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

+0

Спасибо, но как я могу передать данные изображения с помощью значка с изображением? –

2

Вы не помещаете иконку в изображение. Если значок является ImageIcon, то вы можете сделать:

.. 
Graphics2D g2 = image.createGraphics(); 
g2.drawImage(icon.getImage(), 0, 0, 16, 16, null); 
g2.dispose(); 
return new ImageIcon(image); 
+0

Также, чтобы улучшить внешний вид, прежде чем нарисовать изображение в g2, вы можете сделать: 'g2.setRenderingHint (RenderingHints.KEY_INTERPOLATION, RenderingHint.VALUE_INTERPOLATION_BICUBIC)' для получения лучшего качества. – andrewmu

+0

Спасибо. Этот ответ + ответ, который я обозначил как решение, помог. –

Смежные вопросы