При покупке современного монитора или ноутбука мы очень часто сталкиваемся с тем, что картинка на экране выглядит мелкой, а если в настройках системы поставить масштаб больше, то некоторые программы начинают «мылиться». Причины такого поведения уходят корнями в бородатые 80ые, когда графические интерфейсы только-только начали появляться, так что начнем с истории возникновения таких параметров как DPI и PPI.
Давным-давно, когда Windows 1.0 еще был в разработке, а персональные компьютеры стоили дороже автомобилей, Apple представила миру Macintosh 128K, имеющий 9" экран с разрешением 512х534 пикселя: на таком экране буква высотой в 72 пикселя выглядела ровно так же, как и буква высотой 1 дюйм на бумаге — так и родился стандарт 72 пикселя на дюйм (PPI — Pixel Per Inch). Тогда же, для связи изображения на экране и на бумаге, был придуман параметр DPI (Dots Per Inch — точек на дюйм), с которым можно столкнуться при сканировании документов или обработке фото. Иными словами параметр PPI — реальный: зная разрешение и диагональ монитора можно без труда узнать, сколько будет пикселей в дюйме, а параметр DPI - виртуальный, введенный лишь для усреднения и унификации при работе с текстом и на экране, и на бумаге. Если PPI монитора совпадает с DPI, под которое рассчитана система, то изображение будет выглядеть так же, как и на листе бумаги. Если PPI будет больше DPI, то картинка на экране будет меньше, чем на бумаге, и наоборот — если PPI меньше DPI то картинка на экране будет больше.
Параметр в 72 DPI был только у Apple, и Microsoft, дабы придумать что-то свое, рассчитали, что экран находится в среднем на 33% дальше, чем лист бумаги, когда мы с него читаем, и поэтому чтобы шрифт на бумаге и экране был одного размера, на экране он должен быть на 33% больше - отсюда и пошел стандарт 96 DPI (72*1.33=96):
Стандарт 96 DPI держится на ПК и до сих пор, хотя в телефонах и планшетах нередки значения в 200, 300 и даже 400 PPI — почему так? Потому что привязка к бумаге всегда была удобной при разработке приложений и выводе текста, к тому же в 80-90ых годах разрешение и размер мониторов росли более-менее пропорционально, и нужды менять стандарт не было. Но в конце 90ых прозвучали первые звоночки — стали появляться мониторы с большим разрешением (до 1600х1200), и при относительно небольших диагоналях PPI получался сильно выше 100. А так как в Windows 95/98 была строгая привязка к 96 DPI то текст на таких мониторах оказывался очень мелким. В прочем исправить этот недостаток было не трудно - ЭЛТ мониторы хорошо умели работать с несколькими разрешениями, и снизив гигантское 1600х1200 до 1024х768 можно было получить крупную и одновременно четкую картинку.
Но время шло, и на рынок стали поступать мониторы с ЖК-матрицами, и на них четко выводилось только наибольшее поддерживаемое разрешение — снижение разрешения приводило к замыливанию картинки. К тому же в погоне за красивыми цифрами производители выпускали мониторы с разрешением 1280х1024 — то есть соотношение сторон было 5:4, и поэтому при снижении разрешения до 1024х768 (чтобы текст был крупным) не только мылилась картинка, но еще и пропорции нарушались - 1024х768 имеет соотношение сторон 4:3. В общем где-то к середине нулевых стало понятно, что на Windows очень большие проблемы с масштабированием и нужно было что-то менять.
Проблемы с масштабированием интерфейса
В чем же проблема создания общего для системы масштабирования? Проблема в том, что шрифты в программах до сих пор считаются в DPI, а картинки - в пикселях. И окно программы выглядит четко и шрифты не перекрывают картинки только до тех пор, пока выполняются четко заданные создателем программы пропорции между размером текста и картинки. Теперь представим что мы выставили DPI = 150. Что произойдет с окном программы, рассчитанным под «стандартный» DPI=96? Размер шрифта, привязанный к DPI, увеличится в полтора раза, и текст может выйти за пределы отведенного для него места в программе и перекрыть картинки или вообще обрезаться, а картинки останутся все такими же мелкими. Если же окно программы - растровое изображение (то есть представляющее собой сетку пикселей), то при увеличении DPI оно просто растянется и станет нечетким:
В Windows XP Microsoft сделала первые шаги к решению проблемы - система говорит программе при запуске выставленный в ней глобальный DPI и устраняется: как там приложение отмасштабируется не ее дело. В итоге с учетом того, что разработчики приложений уже не один десяток лет писали под четко заданный DPI=96, большинство программ масштабировалось одним из двух способов, описанных выше, хотя появились первые исключения, имеющие в своем арсенале картинки нескольких разрешений и возможность адаптировать размер окна в зависимости от DPI — это в основном программы от Microsoft (браузер IE, офисный пакет и все стандартные приложения).
Масштабирование в Windows Vista, 7 и 8
К середине нулевых в Microsoft поняли, что с масштабированием нужно что-то делать, и придумали универсальный способ, проработавший без особых изменений вплоть до выхода Windows 10 в 2015 году. Он заключался в том, что теперь в системе можно выставить четко заданный глобальный DPI в процентах — за 100% разумеется принят 96 DPI, 125% — 120 DPI, 150% — 144 DPI, 200% — 192 DPI, а так же можно задать собственный DPI. В принципе это охватывало весь зоопарк устройств, начиная от FHD мониторов на 27" (около 90 PPI) и заканчивая 2К матрицами в 13" ультрабуках (около 200 PPI). И теперь разработчикам программ нужно всего лишь продублировать картинки в ней в 4 различных DPI, и в зависимости от системного DPI выводить в программе нужную картинку в том или ином разрешении (ну а нужный размер шрифта подтянется из системы) — в таком случае и весь текст достаточно крупный, и картинки четкие. Однако две проблемы все равно оставались:
- Многие «упертые» разработчики упорно писали программы в 96 DPI (или же банально не обновили свои программы под Windows Vista и новее). В таком случае Windows обрабатывает окно программы в 96 DPI, а потом выводит ее на экран как картинку, предварительно увеличив DPI до заданного в системе. Да, разумеется и текст и картинки в таком случае оказываются несколько размазанными, однако пропорции сохранены и работать с такой программой можно, хоть и неприятно.
- Так и не решена проблема с тем, что пользователь может выставить свой DPI — например 110. Тут программы опять работают кто во что горазд: хорошо написанные программы просто «подгоняют» пользовательский DPI под ближайший четко заданный — в данном случае это 120, и работают так, как будто в системе задан DPI=120. Да, окно программы получается чуть меньше или больше желаемого, однако и картинки, и шрифты четкие. Плохо написанные программы ведут себя или так же, как и написанные под 96 DPI — при выводе на экран мылятся шрифты и картинки, или же вообще игнорируют системный DPI и выводятся в 96 — то есть очень мелко.
Масштабирование в Windows 10
Майкрософт не был бы Майкрософтом, если бы в Windows 10 не ввел новой алгоритм масштабирования, поломав уже почти 10 лет как существующий и хорошо работающий старый. Новый алгоритм основан на том, чтобы программы выглядели четко и крупно при любом DPI, а не только при 4ех заданных в системе (то есть так же, как и на Android, где на любом устройстве из целого зоопарка моделей программа выглядит нормально). В итоге программа, которая под Windows 8 в масштабе 150% выглядела четко и крупно, на 10ке выглядит так, как будто написана под 96 DPI и растянута системой в полтора раза. Да, разумеется некоторые программы уже адаптированы под новый способ масштабирование — например тот же браузер Google Chrome, ну а для всех других программ есть фикс, который возвращает старый тип масштабирования. Этот фикс — программа под названием XPExplorer, скачать ее можно бесплатно с официального сайта: XPExplorer. Работать с программой просто — нужно ее запустить, поставить галку напротив «Use Windows 8.1 DPI scaling», указать ниже нужный масштаб и добавить программу в автозагрузку:
Если же у Вас стоит масштаб порядка 125% и вы пользуетесь программой, которая умеет работать только с 96 DPI (100%), то можно для нее отключить масштабирование — тогда она будет выводиться в 96 DPI, что будет несколько мелко, но текст и картинки в ней будет четкими. Для этого нужно нажать правой кнопкой мыши по .exe программы, выбрать в выпавшем списке «Свойства», перейти в открывшемся окне во вкладку «Совместимость» и поставить галку напротив «Отключить масштабирование изображения при высоком разрешении экрана», после чего нажать кнопку «Применить»:
В общем и целом ситуация с масштабированием под Windows гораздо печальнее, чем под macOS, где используется всего несколько разрешений и размеров дисплеев, и проблем оптимизировать программы под несколько четко заданных PPI нет. Однако некоторые подвижки Microsoft все же делает, и есть надежда что в будущем Windows будет корректно работать на любом мониторе.