Высокая поддержка DPI в Racket

Большинство людей склонны видеть ссылку на объект как указатель на языке C-language-like-memory. Хотя это не является технически корректным, большинство реализаций реализуют его как указатель. Например, в случае указателей сжатых объектов JVM хранит только биты с 3 по 34 64-разрядного указателя на 64-битной платформе. Другие реализации также могут использовать другую схему: ссылка может быть индексом в массив указателей, содержащий все объекты.

3
задан Josh Grant 18 January 2019 в 14:47
поделиться

1 ответ

Это не полный ответ, но, возможно, это поможет вам начать.

Во-первых, вы говорите «изображения не сетчатки». Это может быть заблуждением. Слово «сетчатка» используется для описания разрешения экрана, которое вы используете (примерно экран «сетчатка», если пиксели экрана слишком малы, ваш глаз не может видеть отдельные точки).

Тем не менее, я предполагаю, что когда вы рисуете загруженное изображение на экране, оно отображается в два раза меньше, чем вы ожидаете?

Причина этого находится в разделе «1.8 Разрешение экрана и текст «Масштабирование» в документах для gui гласит:

В Mac OS размеры экрана описываются пользователям в единицах рисования. Дисплей Retina обеспечивает два пикселя на единицу чертежа, в то время как единицы чертежа используются последовательно для размеров окна, положений дочерних окон и рисования на холсте. «Точка» для определения размера шрифта эквивалентна единице рисования.

Одним из решений является масштабирование загруженного изображения в два раза:

(scale 2 the-loaded-image)

перед его рисованием.

Наконец, как программа может узнать, является ли текущий дисплей дисплеем сетчатки? Функция get-display-backing-scale - это то, что вам нужно:

(require racket/gui/base)
(get-display-backing-scale)

Она вернет 2.0, если на экране сетчатки глаза, в противном случае 1.0. Если у вас более одного монитора, найдите эту функцию в документации, чтобы узнать подробности об этом.

0
ответ дан soegaard 18 January 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: