[英]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.