2016-09-08 2 views
0

Java, похоже, масштабирует экран заставки, передаваемый как переключатель jvm, например.Java Splash Screen scale factor

Java -splash: splash_file.png

в зависимости от размера монитора.

В источнике я могу видеть ссылку на некоторый изначально рассчитанный масштабный коэффициент. Кто-нибудь знает, как рассчитывается этот коэффициент масштабирования?

ответ

1

Я бы предположил, что он рассчитан стандартным способом для графики, которая принимает изображение заданного размера в неограниченном «мире» (мировые координаты), преобразует его в нормализованное устройство (думает единичный квадрат), а затем преобразует его снова к координатам экрана. Преобразования состоят из перевода и масштабирования точек.

Учитывая окно заставки в мире (так, как это должно появиться без перевода или масштабирования), нормированные (, у й) значений получаются следующим образом:

Первая часть - это перевод, а вторая - масштабный. Это уменьшает изображение, которое должно содержаться в квадрате 1 x 1, поэтому все значения (x, y) являются дробными.

Чтобы перейти от нормированной на экране системы координат значения вычисляются следующим образом:

Эти операции обычно осуществляются эффективно с помощью перевода и масштабирования матрицы умножений. Вращение также может применяться.

Это на самом деле низкоуровневое представление о том, как вы могли бы делать образы, фигуры и т. Д., Нарисованные так или иначе, как угодно, и последовательно представлять их на экранах любого размера. Я точно не знаю, как это делается в примере, который вы даете, но, скорее всего, это будет какая-то вариация. См. Начало this presentation для визуального представления.

1

Это значение фактически зависит от реализации jdk и зависит от архитектуры.

Я просмотрел на OpenJDK code, и для многих архитектур, это просто жёстко к 1.

Например, в переплетах окон, вы найдете:

SPLASHEXPORT char* 
SplashGetScaledImageName(const char* jarName, const char* fileName, 
         float *scaleFactor) 
{ 
    *scaleFactor = 1; 
    return NULL; 
} 

Значение scaleFactor является затем сохраняется в структуре, доступ к которой осуществляется через JNI с помощью метода _GetScaleFactor.

+0

Меня особенно интересуют окна и оракула. Конечно, это масштабирование. так как я также показываю одно и то же изображение на предзагрузчике приложения, которое появляется после заставки, и размер сильно отличается. – pranahata

+0

Знаете ли вы, как определить, какие файлы openjdk используются как в oracle jre, а какие из них превышены с помощью кода прокрутки oracle? – pranahata