Я пишу программное обеспечение, используя текст и некоторую графику, отображаемую в графическом интерфейсе, используя Swing graphics2d. В начале текст и графика были размытыми, потому что масштабирование (windows 10) экрана с высоким разрешением имеет коэффициент 1,5.
После некоторых исследований я получил четкий текст с помощью setRenderingHints, и графика изменилась при изменении свойств конечного программного обеспечения:
Настройки HighDpi вручную для «системы» (Windows 10).
Но я хотел бы получить плавную графику без изменения пользователем свойств программного обеспечения вручную.
Я уже попробовал все существующие типы BufferedImages и все типы getScaledInstance. Кроме того (это не проблема Java, это может быть другой вопрос) Я попытался установить параметры программного обеспечения HighDpi с помощью файла манифеста Windows, но он не принимает настройки.
Это помогло получить текст в graphics2d хрустящим:
Map<?, ?> desktopHints = (Map<?, ?>)
Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
if (desktopHints != null)
{
g2d.setRenderingHints(desktopHints);
}
Но получить графику нормально не удалось:
BufferedImage imgOrig = ImageIO.read(song.getFigure());
Image scaledImage = imgOrig.getScaledInstance(-1, 300, BufferedImage.SCALE_SMOOTH);
g2d.drawImage(scaledImage , leftValue, heightValue, this);
Как уже говорилось, я изменил imgOrig на все существующие типы BufferedImages и перепробовал все типы масштабирования, но ни один не помогает
Это помогло получить плавную графику:
Отменить настройки HighDpi конечной программы вручную на «system»
Чтобы получить это поведение автоматически, я включил программу.exe.manifest
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> <!-- fallback for Windows 7 and 8 -->
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">system</dpiAwareness>
</windowsSettings>
</application>
, который принимается и не выдает никакой ошибки, но настройки HighDpi не соответствуют желаемым.
Цель состоит в том, чтобы автоматически получить такое же поведение, как если бы параметры highdpi были переопределены вручную.