Windows 8似乎使托盘图标为20 x 20像素.似乎
Java仍然认为它们应该是16 x 16像素.这会导致一些不好的变形,因为Java会缩小任务,然后Windows会缩小备份.以下示例使用这三个图像创建三个这样的托盘图标(注意失真):
.
import java.awt.Image; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; public class TrayTest { public static void main(String[] args) throws Exception { final SystemTray tray = SystemTray.getSystemTray(); TrayIcon trayIcon16 = new TrayIcon(getimage("16pxBlue.png")); tray.add(trayIcon16); TrayIcon trayIcon20 = new TrayIcon(getimage("20pxRed.png")); tray.add(trayIcon20); TrayIcon trayIcon20autoSize = new TrayIcon(getimage("20pxGreen.png")); trayIcon20autoSize.setimageAutoSize(true); tray.add(trayIcon20autoSize); } public static Image getimage(String resource) { return Toolkit.getDefaultToolkit().createImage(TrayTest.class.getResource(resource)); } }
这是整个东西看起来像放大像素线添加(打开图像在一个新的选项卡将给你一个更清晰的视图):
我的问题:
如何防止Java / Windows 8扭曲我的图标?
解决方法
16×16的大小显然硬编码到Java TrayIcon实现中.我没有看到在运行时更改它的方法.从
WTrayIconPeer.java
:
final static int TRAY_ICON_WIDTH = 16; final static int TRAY_ICON_HEIGHT = 16;
这需要是reported as a bug.
作为解决方法,使用平滑的反锯齿图标将使失真不明显.
如果您绝望,您可以使用JNA或JNI编写(或找到)替代托盘图标的实现.在WTrayIconPeer.java和awt_TrayIcon.cpp
中的相应本地代码可以作为指导.看起来好像很多工作.
原文地址:https://www.jb51.cc/java/123747.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。