Лучшая стратегия для хранения почерка

1

Я пишу мобильное приложение (Android), которое позволит пользователю "писать" на холст с помощью устройства с одним касанием с точностью до 1 пикселя. Приложение будет работать на планшетном устройстве, которое будет примерно стандартным размером 8 1/2 "x 11". Моя стратегия заключается в том, чтобы сохранить "текст" в виде векторных данных, поскольку каждый ход устройства ввода будет по существу вектором, состоящим из начальной и конечной точек, а также некоторым количеством промежуточных точек, которые помогают определить форму вектор (созданный сенсорным экраном/ОС при движении касания). Это должно позволить мне следить за порядком, в котором были удалены штрихи (поддерживать отмену и т.д.), И быть достаточно гибкими, чтобы этот текст мог быть изменен и т.д., Как и любая другая векторная графика.

Однако, сделав очень грубую заднюю часть вычислений огибающей, с очень точным устройством ввода и большим экраном, чтобы вы могли эмулировать на одной основе стандартный блокнот, что означает, что у вас будет ~ 1700 ударов в секунду полная страница текста. В худшем случае, что каждый удар может составлять до ~ 20-30 отдельных точек (точка для каждого пикселя или такта штриха), что означает ~ 50 000 точек данных на страницу... ПУТЬ слишком большая для SQLite/Android, чтобы справляться с любым ожиданием надежности при перезагрузке страницы и воссоздании векторных штрихов (я должен представить, что вытащить 50 000+ результатов из SQLite db превысит CursorWindow предел 1Mb)

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

Любые предложения по эффективному решению этой проблемы?

Спасибо!

Пол

Теги:
vector
vector-graphics
handwriting

2 ответа

0
Лучший ответ

Решение, которое я использую сейчас, хотя я был бы открыт для любого дальнейшего предложения!

  • Создайте представление холста, которое может как конвертировать пути SVG в пути Android, так и перехватывать события движения, конвертируя их в Android Paths, а также сохраняя их как пути SVG.
  • Отобразить Android-контуры на экране в onDraw()
  • Запишите пути SVG в файл .svg

Пол

0

Есть ли какая-либо причина использования векторных данных в первую очередь? Не зная ваших других требований, мне кажется, что вам просто нужно хранить данные в растровой/растровой картинке и сжимать ее с помощью обычных методов сжатия, таких как PNG/zip/djvu (или если производительность страдает, такие простые вещи, как кодирование по длине /RLE ).

ИЗМЕНИТЬ: извините, я не ясно читал вопрос. Однако, если вам нужны только такие вещи, как "отменить" и "изменить размер", вы можете сделать снимок растрового изображения для каждого штриха (конечно, вам нужно всего лишь сделать снимок областей, которые меняются).

Также может возникнуть гибридный подход, когда вы сначала показываете растровое изображение моментального снимка, ожидая загрузки (реальных) векторных изображений.

Кроме того, я не знаком с ограничением курсора android, но SQL-запросы всегда можно переписать, чтобы разделить результат на части (через LIMIT... OFFSET).

  • 0
    Я использую векторы для хранения, так что я могу легко конвертировать / масштабировать данные, экспортировать их с устройства и иметь возможность редактировать их в других приложениях и т. Д. После публикации этого вопроса я выяснил, как представлять векторы в Android, и как хранить их эффективно; по существу, как пути SVG. Я выложу полный «ответ», вкратце подробно описав это. Спасибо за вклад.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню