簡體   English   中英

如何在java中獲取任何文件的圖標/圖像?

[英]How to get the icon/image of any file in java?

我有一個裝滿 java.io.File 的 java.util.List,我不想在 gui 中列出它們。 為了顯示它們,我不想顯示可以通過 java.io.File 的 getName() 方法訪問的名稱。 我想顯示他們的圖標/圖像,例如在桌面上顯示它們。 為了構建這個,我使用了最新的 javaversion (Java8/1.8)。 到目前為止,我找到了一種方法來獲取任何文件的圖像,如下所示:

Icon icon = FileSystemView.getFileSystemView().getSystemIcon(pFile);

問題在於,返回的圖標的分辨率非常小(16x16),而 id 喜歡以更大的尺寸顯示它。 80x80 將是完美的,但不必完全如此。 64x64 或 smth 也可以。 所以我設法調整圖標的大小並拉伸它,但是將 16x16 拉伸到 80x80 並不像你想象的那么酷。 有更少的像素來獲得好的結果。
我也找到了本教程,但本教程中顯示的第一種方法不適用於 Java8: http ://www.rgagnon.com/javadetails/java-0439.html 我現在使用的方法是從那里復制的。

那么有沒有辦法獲得更大尺寸的圖標,例如顯示在特定文件桌面上的圖標?

謝謝
巴施迪

private BufferedImage getBufferedImage(final File pFile)
        throws FileNotFoundException {
    Image icon = ShellFolder.getShellFolder(pFile).getIcon(true);
    BufferedImage im = new BufferedImage(icon.getWidth(null),
            icon.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = im.createGraphics();
    g.drawImage(icon, 0, 0, null);
    g.dispose();
    int width = im.getWidth();
    int height = im.getHeight();
    System.out.println(width);
    System.out.println(height);
    final int maxHeigh = 79;
    double scaleValue = 0;
    if (height > width)
        scaleValue = maxHeigh / height;
    else
        scaleValue = maxHeigh / width;
    final int scaledWidth = (int) (im.getWidth() * scaleValue);
    final int scaledHeigh = (int) (im.getHeight() * scaleValue);
    BufferedImage resized = new BufferedImage(scaledWidth, scaledHeigh,
            im.getType());
    g = resized.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(im, 0, 0, scaledWidth, scaledHeigh, 0, 0, im.getWidth(),
            im.getHeight(), null);
    g.dispose();
    return resized;
}

我導入了 jdk7 並在 ShellFolder 中使用了舊函數。 工作正常,即使在 java8 上運行時也是如此。 謝謝您的幫助 :)

我創建了一個名為 JIconExtractReloaded 的庫,它不僅可以提取 32x32 的所有圖標大小。 這是鏈接https://github.com/MrMarnic/JIconExtractReloaded

寫就好了:

BufferedImage image = JIconExtract.getIconForFile(128,128,"C:\\Windows\\explorer.exe");

你有圖標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM