Windows 8扭曲了我的TrayIcon

Lun*_*box 10 java windows trayicon

Windows 8似乎使托盘图标为20 x 20像素.似乎Java仍然认为它们应该是16 x 16像素.这会导致一些不良的失真,因为Java会缩小范围,然后Windows会重新调整内容.以下示例使用这三个图像创建三个托盘图标,如下所示(注意失真):

20x20绿色图标 20x20红色图标 16x16蓝色图标

结果托盘.

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是整个事物看起来像放大了像素线放大(在新标签中打开图像会给你一个更清晰的视图):

在此输入图像描述

我的问题: 如何防止Java/Windows 8扭曲我的图标?

Map*_*boy 0

这可能只是使用 2 的幂的图标 - 16x16、32x32 等。尽管本机操作系统(Windows,在您的情况下)支持它,但 java 处理任务栏图标和程序图标的幂为 2仅尺寸图像。尝试将其大小调整为 32x32,然后重试。