如何获取 java 中任何文件的 icon/image?
How to get the icon/image of any file in java?
我有一个 java.util.List 充满了 java.io.File 我不想在 gui 中列出它们。为了显示它们,我不想显示它们的名字,可以通过 java.io.File 的方法 getName() 访问它们。我想显示它们的 icon/image ,例如在桌面上显示它们。为了构建它,我使用了最新的 javaversion (Java8/1.8)。到目前为止,我找到了一种方法来获取任何文件的图像,如下所示:
Icon icon = FileSystemView.getFileSystemView().getSystemIcon(pFile);
问题在于,返回的图标分辨率非常小(16x16),我想以更大的尺寸显示它。 80x80 将是完美的,但不一定是它。 64x64 或类似的东西也可以。所以我设法调整图标大小并拉伸它,但是将 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。这里是 link https://github.com/MrMarnic/JIconExtractReloaded.
随便写:
BufferedImage image = JIconExtract.getIconForFile(128,128,"C:\Windows\explorer.exe");
你有图标。
我有一个 java.util.List 充满了 java.io.File 我不想在 gui 中列出它们。为了显示它们,我不想显示它们的名字,可以通过 java.io.File 的方法 getName() 访问它们。我想显示它们的 icon/image ,例如在桌面上显示它们。为了构建它,我使用了最新的 javaversion (Java8/1.8)。到目前为止,我找到了一种方法来获取任何文件的图像,如下所示:
Icon icon = FileSystemView.getFileSystemView().getSystemIcon(pFile);
问题在于,返回的图标分辨率非常小(16x16),我想以更大的尺寸显示它。 80x80 将是完美的,但不一定是它。 64x64 或类似的东西也可以。所以我设法调整图标大小并拉伸它,但是将 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。这里是 link https://github.com/MrMarnic/JIconExtractReloaded.
随便写:
BufferedImage image = JIconExtract.getIconForFile(128,128,"C:\Windows\explorer.exe");
你有图标。