есть Jlabel с ImageIcon. У ImageIcon есть метод getIconHeight, но нету ыetIconHeight.
Как задать размер ImageIcon-у.
Спасибо
изменить размер imageIcon
Модератор: Absurd
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
мда, эта задачка посложней будет ..
Задать размер нельзя никак.
Можно создать копию Image_а с новыми размерами.
Есть две проблемы:
1. получить картинку
2. resize_нуть её
Первую я решил таким вот образом:
Наверное стоило бы проверять прямое кастование типов, но ну его
(не знаю, что делать, если картинка в иконке НЕ sun.awt.image.ToolkitImage ..)
и вторая - нашел где-то на SUNовском форуме:
Ну, в общем, у меня работает.
Вот полный код:
Задать размер нельзя никак.
Можно создать копию Image_а с новыми размерами.
Есть две проблемы:
1. получить картинку
2. resize_нуть её
Первую я решил таким вот образом:
Код: Выделить всё
URL imageURL = getClass().getResource("/test.jpg");
ImageIcon imageIcon = new ImageIcon(imageURL);
Image image = imageIcon.getImage();
ToolkitImage toolkitImage = (ToolkitImage)image;
BufferedImage bufferedImage = toolkitImage.getBufferedImage();
(не знаю, что делать, если картинка в иконке НЕ sun.awt.image.ToolkitImage ..)
и вторая - нашел где-то на SUNовском форуме:
Код: Выделить всё
public static BufferedImage resizeImage(BufferedImage image, int width, int height) {
ColorModel cm = image.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(width, height);
boolean isRasterPremultiplied = cm.isAlphaPremultiplied();
BufferedImage target = new BufferedImage(cm, raster, isRasterPremultiplied, null);
Graphics2D g2 = target.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
double scalex = (double) target.getWidth()/ image.getWidth();
double scaley = (double) target.getHeight()/ image.getHeight();
AffineTransform xform = AffineTransform.getScaleInstance(scalex, scaley);
g2.drawRenderedImage(image, xform);
g2.dispose();
return target;
}
Вот полный код:
Код: Выделить всё
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import sun.awt.image.ToolkitImage;
public class ChangeIconSize {
public ChangeIconSize() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null);
init(panel);
frame.add(panel);
frame.setSize(800, 600);
frame.setVisible(true);
}
private void init(JPanel panel) {
URL imageURL = getClass().getResource("/test.jpg");
ImageIcon imageIcon = new ImageIcon(imageURL);
JLabel l1 = new JLabel(imageIcon);
l1.setBounds(0, 0, 400, 300);
panel.add(l1);
Image image = imageIcon.getImage();
ToolkitImage toolkitImage = (ToolkitImage)image;
BufferedImage bufferedImage = toolkitImage.getBufferedImage();
BufferedImage resizedImage = resizeImage(bufferedImage, bufferedImage.getWidth()/2, bufferedImage.getHeight()/2);
ImageIcon imageIcon2 = new ImageIcon(resizedImage);
JLabel l2 = new JLabel(imageIcon2);
l2.setBounds(400, 0, 400, 300);
panel.add(l2);
}
public static BufferedImage resizeImage(BufferedImage image, int width, int height) {
ColorModel cm = image.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(width, height);
boolean isRasterPremultiplied = cm.isAlphaPremultiplied();
BufferedImage target = new BufferedImage(cm, raster, isRasterPremultiplied, null);
Graphics2D g2 = target.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
double scalex = (double) target.getWidth()/ image.getWidth();
double scaley = (double) target.getHeight()/ image.getHeight();
AffineTransform xform = AffineTransform.getScaleInstance(scalex, scaley);
g2.drawRenderedImage(image, xform);
g2.dispose();
return target;
}
public static void main(String[] args) {
new ChangeIconSize();
}
}