Различный рендеринг в симуляции или использование saveFrame() с использованием обработки в Intellij

После многих лет работы с Processing IDE я слишком скучал по Intellij IDEA, поэтому вернулся к ней, но Processing остался :wink:

Однако нарисованные фигуры менее четкие, чем в реальном PDE, например, простой круг визуализируется по-разному, используя как последнюю доступную версию Processing 4.1.2, Java 17, тот же ПК и тот же монитор:

В ПДЭ:

public void setup() {
    size(500, 500);
}


public void draw() {
    background(40);
    noStroke();
    fill(255);
    circle(width/2, height/2, 400);
    saveFrame("./PDE.png");
    noLoop();
}

и результат:

Однако с Intellij:

import processing.core.PApplet;

public class Main extends PApplet {

    public void settings() {
        size(500, 500);
    }


    public void draw() {
        background(40);
        noStroke();
        fill(255);
        circle(width/2, height/2, 400);
        saveFrame("Intellij IDEA.png");
        noLoop();
    }
    public static void main(String... args) {
        Main pt = new Main();
        PApplet.runSketch(new String[]{"testRendering"}, pt);
    }
}

saveFrame() точно такой же, как и в Processing IDE, но реальный вид в скетче:

Я предполагаю, что это проблема рендерера, но я не могу изменить его, например, с помощью fullScreen(P2D), потому что он выдает ошибки. Единственное решение, которое я нашел, - это использование Maven, но я не такой, поэтому я бы предпочел найти решение своей проблемы.

Проверьте, есть ли у вас масштабирование пользовательского интерфейса 1.25 в настройках экрана Windows?

Mruk 04.02.2023 12:47

@Mruk У меня тоже нет проблем с IDE обработки… Думаю, настройки экрана не виноваты

Grusat 04.02.2023 14:58

IDE Processing игнорирует глобальные настройки Windows. Просто сделайте тест, как оно в Идее и напишите нам заключение.

Mruk 04.02.2023 15:18

Ок я этого не знал! Я попробую, я просто предположил, что это не так, потому что 2 изображения имеют одинаковый размер, хотя одно было получено через Intellij, а другое - с помощью Processing IDE.

Grusat 04.02.2023 15:42

У меня действительно масштабирование пользовательского интерфейса 1,25 в Windows, и установка его на 100% заставляет работать сглаживание! Однако можно ли поставить 100% только в Intellij и не повлиять на остальную часть моей Windows?

Grusat 04.02.2023 16:51

Кстати, где в структуре проекта вы импортировали processing.core?

Mruk 05.02.2023 09:51

Я импортировал Processing/core/library на вкладке библиотеки в структуре проекта, все компилируется, и импорт в моем коде хорошо распознается

Grusat 05.02.2023 10:26

Хорошо, вот рабочее решение для вашего вопроса: -Dsun.java2d.uiScale=1.0 (stackoverflow.com/a/48623068/4885365)

Mruk 05.02.2023 15:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема возникает из-за того, что окно масштабируется (в соответствии с настройками масштабирования Windows), но его содержимое не отображается в более высоком разрешении (отсюда и «зазубрины»).

Это проблема только с рендерером по умолчанию (Java AWT). Исправить это:

  • Вызовите System.setProperty("sun.java2d.uiScale", "1") перед PApplet.runSketch() -- это предотвратит масштабирование окна.

Альтернативным решением является использование средства визуализации JavaFX (size(500, 500, FX2D)), которое, похоже, ведет себя правильно (контент отображается с более высоким разрешением).

Однако, если масштабирование с высоким разрешением не требуется с помощью средства визуализации FX2D, вы можете вызвать System.setProperty("prism.allowhidpi", "false"), чтобы отключить его.

Другие вопросы по теме