Может ли холст обрабатывать двойные числа как точки?
Это canvas
способный к обработке double
числа как 0.5, 10.4
так далее? Или это будет внутренне округлено до целого числа (если да, то как?).
Я спрашиваю, потому что я думаю, что элементы на холсте представлены в виде пикселей.
И как пиксель всегда размер 1x1
(поправьте меня, если я ошибаюсь), есть ли преимущество более точного рисования, если я поставлю double
значения функции холста, а не integer
?
2 ответа
Дробные координаты возможны, так как браузер может использовать их для интерполяции объектов на уровне пикселей. Для контуров это приводит к сглаживанию, тогда как для внутренних пикселей эта интерполяция может сделать вещи немного размытыми. В частности, если ваш объект сформирован не отдельными пикселями, а чем-то довольно гладким, например, кружком, то рендеринг на уровне субпикселей может дать пользователям впечатление большего разрешения, чем физически возможно, из-за того, как мы воспринимали антипиксель. набросок.
Но, как сказал raina77ow в комментарии к вашему вопросу, это обходится дорого с точки зрения дополнительной работы браузера, что приводит к raina77ow производительности. Поэтому я бы использовал эти рекомендации, чтобы принять решение:
- Если объект для рисования состоит из областей пикселей, заполненных одним цветом, и высокой контрастности между соседними областями, то я бы использовал интегральные координаты, поскольку двойные координаты вызовут размытие, которое может выглядеть плохо.
- Если вы рисуете несколько вещей не слишком часто, и геометрическая точность желательна, используйте двойные координаты.
- Если вам нужно беспокоиться о производительности, используйте целочисленные координаты.
Поскольку ваш вопрос также помечен Java: посмотрите наRenderingHints
, Настройка управления штрихом будет контролировать, будут ли координаты округлены в некоторых случаях или нет, в то время как настройки сглаживания и интерполяции будут влиять на то, как отображаются дробные позиции, первый для векторных контуров и второй для растровых изображений.
Нет, я не думаю, что холст может сдавать двойные очки. Обходной путь, однако, заключается в приведении двойного к int. Таким образом, число обрабатывается как int и работает как обычно. Кастинг выглядит так:db.drawImage(image, (int) x, (int) y;
Я использую это в своих играх, и это прекрасно работает.