.lnk文件中的图标到javafx图像

时间:2016-11-16 19:06:58

标签: java javafx bufferedimage

我正在尝试从.lnk文件中获取Icon,将其放入javafx图像中,然后将其另存为.png文件(以确保它正常工作)。

我当前的代码编译但不起作用:

import java.io.*;
import java.util.*;
import javax.swing.filechooser.FileSystemView;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javafx.embed.swing.SwingFXUtils;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
import javafx.scene.image.Image;
import javax.imageio.ImageIO;
class Iconic {
    public static void main(String[] args) throws IOException{
        File origin = new File("C:\\Users\\00001\\OneDrive.lnk");
        Icon icn = FileSystemView.getFileSystemView().getSystemIcon(origin);
        ImageIcon ico = ((ImageIcon) icn);
        BufferedImage bi = new BufferedImage(
            ico.getIconWidth(),
            ico.getIconHeight(),
            BufferedImage.TYPE_INT_RGB);
        Graphics g = bi.createGraphics();
        ico.paintIcon(null,g,0,0);
        g.dispose();
        Image img = SwingFXUtils.toFXImage(bi,null);

        File output = new File("C:\\Users\\00001\\");
        BufferedImage bim = SwingFXUtils.fromFXImage(img,null);
        ImageIO.write(bim,".png",output);
    }
}

1 个答案:

答案 0 :(得分:0)

您几乎就在那里,但是,您的代码中存在两个问题。两者都与ImageIO.write(...)方法有关。

来自ImageIO.write(RenderedImage, String, File)的API文档:

  

使用支持给定格式的任意ImageWriter将图像写入File。如果已存在File,则其内容将被丢弃。

     

<强>参数:

     

im - 要写RenderedImage

     

formatName - String包含格式的非正式名称。

     

output - 要写入File

  1. 第二个参数是格式名称,而不是文件扩展名。所以,第二个参数应该是&#34; PNG&#34;,而不是&#34; .png&#34;。因为ImageIO找不到任何可以编写&#34; .png&#34;格式,write(...)调用将默默返回false。我建议您始终检查ImageIO.write(...)

  2. 的返回值
  3. 第三个参数是要写入的目标文件。此文件的路径必须指向一个文件,但是您的文件只指向一个目录。如果您只修复上面的格式名称,那么您很可能会看到IOException

  4. 所以,你的编写代码的固定版本就像:

    File output = new File(origin.getParentFile(), origin.getName().replace(".lnk", ".png"));
    
    if (!ImageIO.write(bi, "PNG", output)) {
        System.err.println("Could not write icon");
    }
    

    我故意将FX Image转换出来。您应该可以直接编写bi,而无需转换为FX Image(当然,除非您操纵FX中的图像)。