Я ищу быстрый алгоритм для рисования намеченной линии. Для этого приложения ширина контура должна быть всего 1 пиксель. Должна быть возможность, по умолчанию или с помощью опции, сделать так, чтобы две линии соединялись без проблем, если они имеют общую точку.
Извините за ASCII-арт, но это, пожалуй, лучший способ его продемонстрировать.
Обычная строка:
##
##
##
##
##
##
«Обведенная» строка:
**
*##**
**##**
**##**
**##**
**##**
**##*
**
Я работаю над dsPIC33FJ128GP802. Это небольшой микроконтроллер/цифровой сигнальный процессор, способный выполнять 40 MIPS (миллионов операций в секунду). Он способен только к целочисленным вычислениям (сложение, вычитание и умножение: он может выполнять деление, но это занимает ~19 циклов). Он используется. одновременно обрабатывать слой OSD, а для вычислений доступно только 3-4 MIPS времени обработки, поэтому скорость имеет решающее значение. Пиксели занимают три состояния: черное, белое и прозрачное; а поле видео 192x128 пикселей. Это для Super OSD, проекта с открытым исходным кодом: http://code.google.com/p/super-osd/
Первое решение, о котором я подумал, состояло в том, чтобы рисовать прямоугольники 3x3 с выделенными пикселями на первом проходе и обычными пикселями на втором проходе, но это может быть медленным, так как для каждого пикселя перезаписывается как минимум 3 пикселя, и время, потраченное на их рисование, тратится впустую. . Поэтому ищу более быстрый способ. Каждый пиксель стоит около 30 циклов. Цель — ‹50 000 циклов, чтобы нарисовать линию длиной 100 пикселей.