Я пытаюсь установить значок приложения Java AWT, чтобы оно отображалось в собственном разрешении на панели задач Windows 10 (в том числе, когда масштабирование рабочего стола установлено выше 100%). Похоже, что по умолчанию, если в исполняемый файл встраивается значок, содержащий несколько размеров, Windows, похоже, выбирает размер, превышающий фактический размер значков панели задач, и уменьшает его (при масштабе 100% размер 32-пиксельного значка изменяется до 24, даже если Поставляется значок 24 пикселя, и аналогично для других масштабов.)
Я решил эту проблему для приложений C++ MFC, загрузив только значок правильного размера в качестве ресурса и отправив в окно сообщение WM_SETICON, что приводит к хорошему острому значку на панели задач и в диалоге alt-tab.
smallIcon = (HICON)LoadImage( myInstance, MAKEINTRESOURCE(smallIconRes), IMAGE_ICON, smallIconSize, smallIconSize, LR_DEFAULTCOLOR );
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)smallIcon);
bigIcon = (HICON)LoadImage( myInstance, MAKEINTRESOURCE(bigIconRes), IMAGE_ICON, bigIconSize, bigIconSize, LR_DEFAULTCOLOR );
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)bigIcon);
Этот подход, похоже, не работает для приложений Java - сообщение WM_SETICON с wParam, установленным в ICON_SMALL, работает нормально, но эквивалент с ICON_BIG игнорируется.
Если я попытаюсь использовать Java API для установки значка, сделав это
List<Image> icons = new ArrayList<Image>();
icons.add(windowIcons.getIcon(20)); // small icons are 20x20 pixels
icons.add(windowIcons.getIcon(30)); // large are 30x30 at 125% scale
setIconImages(icons);
используется правильный значок, но он выглядит размытым, как будто что-то изменило его размер до "ожидаемого", а затем изменило его размер обратно. Слева вот как это выглядит, справа - содержимое файла иконки.
Итак, мой вопрос: что я могу сделать в этом Java-приложении, чтобы Windows отображала значок, который я даю, на панели задач, не масштабируя и не размывая детали?