На java graphics2d изображение буферизовано размытым на увеличенном (фактор 1.5) экране с высоким разрешением - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу программное обеспечение, используя текст и некоторую графику, отображаемую в графическом интерфейсе, используя 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 были переопределены вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...