Изменение размера изображения на jLabel
Я пытаюсь изменить размер изображения на jLabel в java, фрагмент кода, который не работает, приведен ниже:
ImageIcon imgThisImg = new ImageIcon(rs.getString("PictureURL"));
Image image=null;
image=jLabel2.createImage(120, 50);
ImageIcon imi=new ImageIcon(image);
jLabel2.setIcon(imi);
Когда я запускаю его, я ничего не получаю на своем компьютере. На самом деле, если я запускаю код ниже, он работает нормально. Дело в том, что я хочу уменьшенное изображение:
ImageIcon imgThisImg = new ImageIcon(rs.getString("PictureURL"));
jLabel2.setIcon(imgThisImg);
Я не могу найти, где я не прав. Пожалуйста, предложите мне любые идеи, как я должен идти об этом.
Спасибо
2 ответа
Решение
Пожалуйста, смотрите ниже лучшее решение для масштабирования изображения. В приведенном ниже коде newImage
это измененное изображение
BufferedImage image = ImageIO.read(imageFile);
BufferedImage newImage = new BufferedImage(newWidth, newHeight, image.getType());
Graphics2D g2 = newImage.createGraphics();
g2.drawImage(image, 0, 0, newWidth, newHeight, null);
g2.dispose();
Вот код для компонента рендеринга, который может дать вам несколько советов.
class PaintCommandListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean hasFocus) {
Component c = super.getListCellRendererComponent(list, value, index, isSelected, hasFocus);
if (c instanceof JLabel && value instanceof PaintCommand) {
JLabel l = (JLabel)c;
PaintCommand pc = (PaintCommand)value;
try {
BufferedImage bi = pc.getUndoImage();
double w = bi.getWidth();
double ideal = 200d;
double ratio = w/ideal;
int aw = (int)(w/ratio);
int ah = (int)(bi.getHeight()/ratio);
BufferedImage bj = new BufferedImage(
aw,ah,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bj.createGraphics();
g.drawImage(bi, 0, 0, aw, ah, null);
g.dispose();
l.setIcon(new ImageIcon(bj));
l.setText("");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return c;
}
}