Высокая поддержка DPI в Racket - PullRequest
0 голосов
/ 18 января 2019

Я создаю простую программу в Racket, которая импортирует два растровых изображения и экспортирует их в одно изображение. У меня проблема с плотностью пикселей на моем MacBook, потому что изображения не сетчатки. Для обработки изображений я использую библиотеку 2htdp / image.

Есть ли способ установить плотность пикселей моей ракетной программы?


Строка, которая экспортирует изображение:

(save-image final-image "final.png" WIDTH HEIGHT)

Я стараюсь не включать слишком много информации, но если я могу добавить что-нибудь (например, код), чтобы прояснить свой вопрос, пожалуйста, дайте мне знать.


P.S .: Обработка подходит к этой проблеме следующим образом:

https://processing.org/reference/displayDensity_.html

1 Ответ

0 голосов
/ 20 января 2019

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

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

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

Причина этого находится в разделе «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. Если у вас более одного монитора, найдите функцию в документах, чтобы увидеть подробности об этом.

...