2013-05-27 2 views
1

Есть ли библиотека, которая поможет конвертировать GDI + GraphicsPath в HTML5 canvas Path? Или мне нужно вручную запустить все GraphicsPath.PathPoints и GraphicsPath.PathTypes, чтобы исправить соответствующий код HTML5 (если да, пожалуйста, поделитесь любыми подсказками)?Как конвертировать GDI + GraphicsPath в HTML5 canvas Path?

+0

Если это небольшой одноразовый проект, я бы построил крошечный парсер, вводящий либо необработанный код метода GraphicsPath.Add ...(), либо PathPoints + PathTypes. Прошло некоторое время с тех пор, как я использовал GDI, но я думаю, что я помню, что addPie и addText - это несколько методов пути gdi, не содержащих html-canvas. Довольно прямо, нет? – markE

+0

@markE Это, вероятно, один проект, но некоторые пути очень сложны (созданы из текста) и содержат тысячи кривых. – SiliconMind

+0

Когда вы говорите «создан из текста», вы имеете в виду .AddString(), или вы имеете в виду, что кто-то создал текстовые пути, используя кучу .AddCurve()? Кстати, смотрите ли вы с данными PathPoints + PathTypes или начинаете с кода, который генерировал путь (ы)? – markE

ответ

1

К сожалению, я не нашел ничего полезного. Некоторые люди предложили использовать SVG как способ «переноса» кривых из GDI в Canvas, но я не смог найти подходящую библиотеку SVG для .NET. Мне потребовалось некоторое время, чтобы понять, как хранятся данные внутри GraphicsPath, потому что это не так просто, как вы думаете. This is what I've came up to.

Зная, как на самом деле работает GraphicsPath, мне удалось воссоздать его, используя кучу функций HTML5: .moveTo(), и .bezierCurveTo(). Результат был довольно аккуратным, хотя окончательное строковое построение занимает некоторое время, и в результате JS-файлы иногда содержат десятые тысячи строк кода, если исходный GraphicsPath представляет собой длинный текст, написанный с фантастическим шрифтом. Удивительно, что Firefox справляется с ними без проблем.

Я не буду вставлять код, который я использую, поскольку он ничего особенного, пока вы читаете и понимаете my answer from another SO question.