Java 系统图标提炼
Java这是一个示例程序,可以将指定文件中的图标提取到 PNG 图像文件中。指定文件可以是任何文件类型,包括扩展名为 .exe 的可执行文件,以及 .dll、.xls、.doc 等文件。
我在网上搜索过类似的方法,但没有找到。
不过,我发现了一种非常简单的获取方法,所以我会和你们分享。
请注意,Chat&Messenger 不使用此方法。一项将文件附加到便签的功能。我正在使用它。
示例程序运行验证
运行示例
*如果与 jar 文件关联,则可以执行此操作。
- 获取示例源代码,编译并运行它。
- 启动应用程序后,主窗口将会打开。只需将要提取的图标拖放到此窗口中即可。
- PNG 图像文件将输出到与原始图标相同的位置。
示例程序说明
Java 中图标提取过程采用以下方法实现。
-
将外观设置为 Windows 样式。
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - 通过拖放获取的文件 javax.swing.JFileChooser.getIcon() 方法 javax.swing.Icon 将其转换为对象。
- javax.imageio.ImageIO.write() 此方法将 Icon 对象输出为 PNG 图像文件。
示例程序
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
public class IconExtractor extends JFrame
implements DropTargetListener {
private JPanel jContentPane = null;
private JLabel jLabel = null;
private JFileChooser 选择器;
public static void main(String[] args) {
IconExtractor extractor = new IconExtractor();
extractor.setVisible(true);
}
public IconExtractor() {
极好的();
尝试 {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
chooser = new JFileChooser();
} catch (Exception e) {
e.printStackTrace();
}
初始化();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("图标提取");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private JPanel getJContentPane() {
如果 (jContentPane == null) {
jLabel = new JLabel();
jLabel.setText("请拖动图标。");
jLabel.setBackground(Color.white);
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
jLabel.setOpaque(true);
新的 DropTarget(jLabel,
DnDConstants.ACTION_COPY_OR_MOVE,this);
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(jLabel, BorderLayout.CENTER);
}
返回 jContentPane;;
}
// — 实现 DropTargetListener —————————-
public void drop(DropTargetDropEvent dtde) {
dtde.acceptDrop(DnDConstants.ACTION_MOVE);
尝试 {
可转移的 tran = dtde.getTransferable();
列表 fileList = (列表) tran
.getTransferData(DataFlavor.javaFileListFlavor);
Iterator iterator = fileList.iterator();
while (iterator.hasNext()) {
文件 file = (File) iterator.next();
ImageIcon icon = (ImageIcon) chooser.getIcon(file);
String ext = file.getAbsoluteFile() + “.png”;
// 保存图像文件
ImageIO.write((BufferedImage) icon.getImage(), “png”,
new File(ext));
jLabel.setText(“<html>提取完成<br>”" + ext);
设置图标图像(icon.getImage());
}
dtde.dropComplete(true);
} catch (Exception e) {
e.printStackTrace();
dtde.dropComplete(false);
}
}
public void dragEnter(DropTargetDragEvent e) {
}
public void dragOver(DropTargetDragEvent e) {
}
public void dropActionChanged(DropTargetDragEvent e) {
}
public void dragExit(DropTargetEvent e) {
}
}
