使用Java获取文件图标的特定版本

时间:2016-10-07 13:30:30

标签: java file filesystems icons thumbnails

我正在看这个question,我正在看第一个答案。

所以我尝试使用这段代码:

function makeSetTheText(b) {
  function setTheText() {
    document.getElementById('div' + b).innerHTML = 'HELLO WORLD'
  }
  return setTheText
}

for (var b = 1; b < 5; b++) {
  document.getElementById('btn' + b).onclick = makeSetTheText(b)
}

哪个会返回<div id='div1'>Div 1</div> <div id='div2'>Div 2</div> <div id='div3'>Div 3</div> <div id='div4'>Div 4</div> <button id='btn1'>Button 1</button> <button id='btn2'>Button 2</button> <button id='btn3'>Button 3</button> <button id='btn4'>Button 4</button>(或引发public static Image getIcon(String fileName) throws Exception { File file = new File(fileName); FileSystemView view = FileSystemView.getFileSystemView(); Icon icon = view.getSystemIcon(file); ImageIcon imageIcon = (ImageIcon) icon; Image image = imageIcon.getImage(); return image; } ),但Image的分辨率非常低。

我假设这是因为返回了Error

有没有办法说明我想要退回哪个Image

2 个答案:

答案 0 :(得分:2)

Java为您提供了两种检索文件图标的可能性 你已经知道了第一个:

Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File(FILENAME));

为您提供16x16像素的结果。

另一个使用ShellFolder

Icon icon = new ImageIcon(ShellFolder.getShellFolder(new File(FILENAME)).getIcon(true));

会根据getLargeIcon方法中的布尔标记getIcon检索较大的一个(32x32)。
我很抱歉,但是(目前)更多的是java默认库无法实现。兴趣存在,因为您可以阅读in this JDK bugreport。 但到目前为止还没有做任何事情。

如果您真的想拥有更大的版本,则需要使用操作系统根据本机调用来检索它们,或者将它们手动存储为本地应用程序资源。

注意:如果您在访问ShellFolder时遇到问题,请阅读this question

答案 1 :(得分:0)

我使用了这种方法:

protected ImageIcon getImageIcon() {
    File f = new File((iconPath!=null)?iconPath:"");
    if (!f.isFile() || !f.canRead()) {
        iconPath = Constants.getDefaultPreviewIconPath();
    }
    ImageIcon icon = new ImageIcon(iconPath, titolo);
    return new ImageIcon(Utils.getScaledImage(
            icon.getImage(), 
            Constants.getICON_WIDTH(), 
            Constants.getICON_HEIGTH()));
}

其中getScaledImage是:

public static 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;
    }