java把icon保存_将HICON保存为png

这篇博客介绍了如何使用Java从Windows系统图标中提取带有透明度的PNG图像。通过解析JDK源代码,作者发现并分享了一个解决方案,该方案涉及获取HICON,转换为GDI+ Bitmap,并使用IStream保存为PNG格式。
摘要由CSDN通过智能技术生成

这个主题相当陈旧,但我遇到了同样的问题,花了很多时间才找到保留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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值