Java получил нарезанные ОС / системные иконки

Я пытаюсь извлечь значок из определенного файла с помощью значков ОС по умолчанию, я искал и нашел два способа сделать это:

public Image getImage(File file) throws FileNotFoundException {
    sun.awt.shell.ShellFolder sf = sun.awt.shell.ShellFolder.getShellFolder(file);      
    return new ImageIcon(sf.getIcon(true)).getImage();
}

а также

FileSystemView.getFileSystemView().getSystemIcon(file);

оба работают, но получают нарезанные значки

после импорта в Java оригинальная форма

Я думал, что у контейнера (JLabel в Swing и ImageView в FX) есть проблема, поэтому я попытался экспортировать его в рабочий стол, но получил ту же нарезанную форму:

public static void writePNG(File f, BufferedImage img) throws Exception {
    ImageWriter writer = null;
    f.createNewFile();
    try(FileImageOutputStream output = new FileImageOutputStream(f.getCanonicalFile())) {               
        writer = ImageIO.getImageWritersByFormatName("png").next();         
        writer.setOutput(output);
        IIOImage iioImage = new IIOImage(img, null, null);
        writer.write(null, iioImage, null);
    } finally {
        if (writer != null)
            writer.dispose();           
    }
}

public static BufferedImage toBufferedImage(Image img) {
    if (img instanceof BufferedImage)
        return (BufferedImage) img;
    BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    Graphics2D bGr = bimage.createGraphics();
    bGr.drawImage(img, 0, 0, null);
    bGr.dispose();      
    return bimage;
}

Есть ли альтернативные решения? Заранее спасибо.

0 ответов

Другие вопросы по тегам