Подтвердить что ты не робот

Возможно ли рисование ХОРОШЕГО СМОТРЕТЬ (как в Flash) на холсте (HTML5)?

Есть ли способ рисовать линию с использованием javascript и холста с "лучшим" сглаживанием, например, Flash?

Я знаю Math.floor(coord) +0.5 трюк, чтобы получить ровно 1 пиксельную линию, когда вам это нужно, но это не то, что я имею в виду. Следующие синие линии, созданные с использованием холста, выглядят неуверенно во всех браузерах, поддерживающих html5 и cavas, поэтому они, вероятно, используют один и тот же алгоритм плохого сглаживания (вероятно, закодированы для скорости, а не для лучшего визуального впечатления). Это то же самое, независимо от ширины линии (на самом деле толще, уродливее):

1px синяя линия Снимок экрана:

alt text

и 3px:

alt text

Как вы можете видеть, это не самый красивый способ рисовать хорошие сглаженные линии, и только нижняя строка выглядит хорошо. Клиент требует, чтобы приложение манипуляции графиком, над которым я работаю, должно "хорошо выглядеть" и очень требовательно к эстетике pov и . Я, вероятно, буду разорвать решение HTML5/Canvas и пойти по флеш файлу, если я не могу решить эту проблему проблема. Или, может быть, я мог бы кодировать хороший алгоритм рисования линий сглаживания в javascript (может ли кто-нибудь дать мне некоторые ресурсы для этого?) Извините за то, что вы не добавляли картинку с линиями, нарисованными во Flash, но дело в том, что они просто выглядят хорошо, сглаживание сделано вправо.

4b9b3361

Ответ 1

Отказываясь от ответа Мариуса:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
   "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="100%" height="100%" version="1.1"
      xmlns="http://www.w3.org/2000/svg">

<rect width="100" height="50" y="37"
style="fill:none;stroke-width:1;
stroke:rgb(0,0,0)"/>

<rect width="100" height="50" x="200"
   style="fill:none;stroke-width:1;
   stroke:rgb(0,0,0)"/>

<line x1="50" y1="67" x2="250" y2="25"
   style="stroke:rgb(0,0,255);stroke-width:2"/>

<text x="2" y="50" >Beta</text>
<text x="201" y="13" >Omega</text>

</svg>

alt text

SVG можно нарисовать на стороне клиента с помощью javascript, так как это просто элементы DOM. И, продвигаясь вперед, это аппаратное ускорение.

Ответ 2

Вместо использования API 2D-чертежа вы можете использовать векторные элементы SVG. Вам нужно будет реализовать свой собственный api, чтобы сделать это, но таким образом вы получите красивые линии, например, во flash. SVG-edit является примером того, что вы можете делать с SVN в браузере.

Ответ 3

Я сомневаюсь, что вы найдете что-нибудь, что сделает его действительно хорошим, что не слишком медленно, чтобы быть полезным. Одна вещь, которую вы можете попробовать, это не повредит производительности слишком много, чтобы нарисовать 4 линии, наложенные друг на друга, каждая из которых смещена на долю пикселя в x и y. Недостаток - это будет немного расплывчато.