这个主题相当陈旧,但我遇到了同样的问题,花了很多时间才找到保留PNG文件透明度的解决方案 .
既然问题可以在Java中轻松解决......
sun.awt.shell.ShellFolder sf = sun.awt.shell.ShellFolder.getShellFolder(file);
ImageIcon icon = new ImageIcon(sf.getIcon(true));
FileOutputStream bos = new FileOutputStream("d:\\icons\\icon.png");
ImageIO.write((BufferedImage)icon.getImage(), "PNG", bos);
...我看了一下JDK源代码 . 在函数“Java_sun_awt_shell_Win32ShellFolder2_getIconBits”中的文件“\ jdk \ src \ windows \ native \ sun \ windows \ ShellFolder2.cpp”中,我找到了我需要的有 Value 的提示 .
此函数从HICON中检索颜色位图,并调用GetDIBits以获取图像数据 . 绘制图标并不是必要的 - 无论如何,这种图标都会丢失 .
非常感谢JDK开发人员 .
这是我最终得到的代码:
static CLSID g_pngClsid = GUID_NULL;
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms533843(v=vs.85).aspx
extern int GetEncoderClsid(const WCHAR* format, CLSID* pClsid);
st