Пользовательский значок JLabel - PullRequest
3 голосов
/ 31 января 2011

Я хочу использовать java JLabel с иконкой нестандартного размера в моем графическом интерфейсе.как это:

http://i.stack.imgur.com/XVglU.png

Я использовал этот код, чтобы изменить размер исходного значка:

    ImageIcon imageIcon = (ImageIcon) jLabel1.getIcon();// new ImageIcon( "Play-Hot-icon.png");

    ImageIcon thumbnailIcon = new ImageIcon(getScaledImage(imageIcon.getImage(), 25 , 25));
    jLabel1.setIcon(thumbnailIcon);

и вот код для изменения размера изображения

private Image getScaledImage(Image srcImg, int w, int h){

    BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = resizedImg.createGraphics();

    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

    g2.drawImage(srcImg, 0, 0, w, h, null);

    g2.dispose();
    return resizedImg;
}    

но после изменения размера изображения и использования этого кода результат получается такой!:

enter image description here

как мне получить желаемое изображение на моем JLabel ??

С уважением, саджад

1 Ответ

4 голосов
/ 31 января 2011

Проблема в том, что когда вы создаете масштабированное изображение, вы используете BufferedImage.TYPE_INT_RGB для вашего нового изображения, а прозрачность отображается в черном цвете с TYPE_INT_RGB.

Чтобы сохранить прозрачность, вам нужнозаменить его на BufferedImage.TYPE_INT_ARGB, так как вам нужен альфа-компонент.

Однако вызов Image.getScaledInstance для imageIcon вернет масштабированное изображение, уже с альфакомпонента, и вы можете передать ему подсказки рендеринга, чтобы поиграть с качеством масштабированного изображения, выполнив по существу то же самое, что и ваша getScaledImage функция, но с меньшими трудностями.

...