Hatred's Log Place

DON'T PANIC!

Sep 27, 2013 - 3 minute read - linux

Мысли о DPI

Точнее о DPI((Dots Per Inch [точек на дюйм] - мера разрешающей способности чего либо: монитора, принтера и т.п.)) мониторов.

Очень вяло задавался вопросом, почему на моём маленьком, слабеньком, не сильно дорогом Asus EeePC 1000HA изображение на мониторе отличное, почти все шрифты выглядят нормально, а почти на всех новых, рабочих мониторах с диагональю 24 дюйма и фулхд разрешением, полная беда, что в Linux, что в Windows.

Да, можно покрутить ручки fontconfig или поставить mactype, но всё равно: на нетбуке же я не крутил!

Мысль в нужную сторону повернуло то, что случайно заметил два пакета в системе: xorg-fonts-75dpi и xorg-fonts-100dpi. Точнее видел я их и раньше, но как-то не обращал внимание на их оконцовку. Логика подсказала, что шрифты для разных экранных разрешений. А какое разрешение у меня? Методом несложных вычислений на основе известных данных (диагональ монитора, максимальное разрешение по X и Y) для нетбука получилось значение в 116dpi. Разогнался и начал считать для остального:

  • Asus EeePC 1000HA (10.2"): 116dpi
  • BenQ GW2460HM (24"): 92dpi
  • BenQ GW2255 (21.5"): 102dpi
  • ViewSonic VA702 (17"): 96dpi
  • Lenovo ThinkPad T530 (15.6"): 141dpi

Для Lenovo ThinkPad T530 есть матрицы с разным разрешением, я считал для 1920x1080 (fullhd).

Понятно, что чем выше значение dpi тем более мелкие пиксели, тем более чёткая картинка получается. Понятно, почему новый BenQ GW2460HM и старичок ViewSonic VA702, стоящие рядом, отображают шрифты примерно одинаково (там есть другие радикальные отличия в пользу первого, но сейчас не про них). И ещё, интуитивно склонялся к монитору 21.5 дюйма, на рабочее место, теперь будет обоснование - почему.

Что же получается? Получается, что если бы прогресс не гнался только за увеличением диагоналей, но и за увеличением разрешающей способности мониторов, нам бы не нужны были всякие хитрые алгоритмы хинтинга, а проблема ШГ плавно бы ушла прочь сама собой.

А как же минусы? Действительно, как же без них: не много софта написано с возможностью работать при больших разрешениях. Всё будет мелко, а при попытке поиграться шрифтами в большую сторону может статься так, что все формы полезут (привет Delphi). Ну и системы по умолчанию не подстраиваются под высокие разрешения: на прошлой работе на 21.5" FullHD мониторе пришлось всё настройки шрифтов подкрурить в большую сторону. Думаю, это далеко не все проблемы.

Если кто хочет подсчитать разрешение своих мониторов, вот функцейка и пример использования на octave (пойдёт и в matlab или scilab):

function monitor_params(diag, xres, yres)
  to_cm = 2.54;
  
  diag_res = sqrt(xres^2 + yres^2);
  dpi = diag_res / diag

  x = xres / dpi
  y = yres / dpi
  
  check = sqrt(x^2 + y^2);

  x_cm = x * to_cm
  y_cm = y * to_cm  
end

monitor_params(24, 1920, 1080)   # BenQ GW2460HM
monitor_params(21.5, 1920, 1080) # BenQ GW2255
monitor_params(17, 1280, 1024)   # ViewSonic VA702
monitor_params(10.2, 1024, 600)  # Asus EeePC 1000HA
monitor_params(15.6, 1920, 1080) # Lenovo ThinkPad T530

И онлайн-компилятор, где это можно прогнать: http://www.compileonline.com/execute_matlab_online.php