Может ли холст обрабатывать двойные числа как точки?

Это canvas способный к обработке double числа как 0.5, 10.4 так далее? Или это будет внутренне округлено до целого числа (если да, то как?).

Я спрашиваю, потому что я думаю, что элементы на холсте представлены в виде пикселей.

И как пиксель всегда размер 1x1 (поправьте меня, если я ошибаюсь), есть ли преимущество более точного рисования, если я поставлю double значения функции холста, а не integer?

2 ответа

Решение

Дробные координаты возможны, так как браузер может использовать их для интерполяции объектов на уровне пикселей. Для контуров это приводит к сглаживанию, тогда как для внутренних пикселей эта интерполяция может сделать вещи немного размытыми. В частности, если ваш объект сформирован не отдельными пикселями, а чем-то довольно гладким, например, кружком, то рендеринг на уровне субпикселей может дать пользователям впечатление большего разрешения, чем физически возможно, из-за того, как мы воспринимали антипиксель. набросок.

Но, как сказал raina77ow в комментарии к вашему вопросу, это обходится дорого с точки зрения дополнительной работы браузера, что приводит к raina77ow производительности. Поэтому я бы использовал эти рекомендации, чтобы принять решение:

  • Если объект для рисования состоит из областей пикселей, заполненных одним цветом, и высокой контрастности между соседними областями, то я бы использовал интегральные координаты, поскольку двойные координаты вызовут размытие, которое может выглядеть плохо.
  • Если вы рисуете несколько вещей не слишком часто, и геометрическая точность желательна, используйте двойные координаты.
  • Если вам нужно беспокоиться о производительности, используйте целочисленные координаты.

Поскольку ваш вопрос также помечен Java: посмотрите наRenderingHints, Настройка управления штрихом будет контролировать, будут ли координаты округлены в некоторых случаях или нет, в то время как настройки сглаживания и интерполяции будут влиять на то, как отображаются дробные позиции, первый для векторных контуров и второй для растровых изображений.

Нет, я не думаю, что холст может сдавать двойные очки. Обходной путь, однако, заключается в приведении двойного к int. Таким образом, число обрабатывается как int и работает как обычно. Кастинг выглядит так:
db.drawImage(image, (int) x, (int) y;
Я использую это в своих играх, и это прекрасно работает.

Другие вопросы по тегам