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);
оба работают, но получают нарезанные значки
Я думал, что у контейнера (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;
}
Есть ли альтернативные решения? Заранее спасибо.