Как установить размер холста HTML5 в соответствии с размером дисплея в пикселях устройства - PullRequest
0 голосов
/ 09 ноября 2018

Можно ли установить размер растрового изображения на холсте HTML5, чтобы он точно соответствовал размеру дисплея в пикселях устройства, то есть количеству физических пикселей, используемых для отображения холста, даже если window.devicePixelRatio не целое число?

Существует хорошее описание того, как изменить размер холста на webglfundamentals , но он неправильно обрабатывает нецелые devicePixelRatio s. Мое понимание до сих пор:

  • Размер отображения холста задается в CSS с помощью, например, canvas {width: 200px;}.
  • Базовый размер растрового изображения устанавливается, например, <canvas width="100"/> в HTML или canvas.width = 100 в JS.
  • Растровое изображение будет растянуто до размера CSS (как это зависит от object-fit и object-position).
  • Мы можем установить размер растрового изображения равным некоторому выражению, включающему canvas.clientWidth.
  • canvas.clientWidth - целое число, его единицей являются пиксели CSS, а также вычисленная ширина содержимого (плюс отступ). Я не знаю, на самом ли деле браузеры отображают контент в целом количестве пикселей CSS или целом числе пикселей устройства.

Итак, webglfundamentals предлагает что-то вроде

canvas.width = Math.floor(canvas.clientWidth * window.devicePixelRatio);

, но если window.devicePixelRatio является дробью, это иногда не работает (линии шириной 2 пикселя, нарисованные на целочисленных координатах, нечеткие). Мой экран 1920x1080 по умолчанию имеет devicePixelRatio, равный 1,5, и масштабирование страницы может повлиять на это, поэтому множество причин, по которым devicePixelRatio, как правило, не является целым числом. Что мы можем сделать?

1 Ответ

0 голосов
/ 10 ноября 2018

1px - это единица логической длины в области CSS / DOM. Dot.

Так что я не думаю, что вы найдете надежный способ получения физических пикселей. Проверьте это .

Вот почему в Sciter я сделал px единиц, чтобы всегда представлять физических пикселей устройства. И представил dip единицы, которые являются логическими пикселями - 1/96 дюйма, измеренного линейкой на поверхности устройства (так 1dip ~ 1px CSS W3C).

Я просто не понимаю, как проводить серьезную разработку пользовательского интерфейса без возможности определять объекты в пикселях устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...