Как реализовать (алгоритм) отрисовку графики «по слоям» на МК?
День добрый всем.
Вопрос вот в чем. Имеется МК (avr arm) и граф.дисплей к нему (TFT 320х480). Конкретно в данном случае необходимо реализовать вывод показаний в виде аналогового индикатора (+ на свободном месте экрана - график, но это к воросу отношения не имеет). Индикатор отображается подложкой в виде обычной картинки, стрелка его - так же картинка. Соотв. как наиболее грамотно реализовать вывод этой информации на экран ЖКИ ?
Решение в лоб - крутим стрелку на нужный градус, перерисовываем подложку, рисуем стрелку поверх нее. Это самое простое решение, но как по мне, не самое элегантное. Дело в том, что если ЖКИ будет, скажем, 640х800 пикселей, перерисовка займет весьма много времени и будет заметна на глаз. Хотелось бы фен-шуя и красоты.
Второе решение, приходящее на ум - это читать с дисплея область с уже отрисованной стрелкой, обсчитывать область с новым ее расположением и заменять первое вторым, тем самым минимизируя область перерисовки, поскольку динамическая область "аналогового индикатора" дай бог процентов 35-40.
Может кто еще какие соображения подкинет, поделится личным опытом так сказать. Готовых либ что-то не нарыл, даже если с ардуины портировать под обычный AVR C.
Без двойного буфера - самое простое помнить "старое значение", где была стрелка, и новое значение - где её нужно перерисовать. Тоже не самый удобный вариант, но его можно реализвать так:
- Стирание стрелки по старым координатам. (Восстановление части заднего фона)
- Рисование стрелки по новым координатам.
Плюсы - Не нужно много памяти. Фактически, только данные о стрелке, координатах и тому подобное.
Минусы - Минимум два кадра отрисовки.
Другой вариант - создавать временный буфер памяти, в котором будет рисоваться изменённая картинка, а затем выводить её на экран (заменять прямоугольник).
Минусы - Требуется память. Много. Можно попытаться отхватить больше памяти, чем есть в чипе.
Плюсы - Делается за один кадр.
Почему бы не использовать что-то другое? Ползунковые индикаторы / полосу / цифры, например. Их проще отрисовать быстро.
Хотя, если так хочется - то... как говорится.
Но лично я эти стрелочки пропустил для себя.
2 кадра не сильно страшно. Площади не большие, так что отрисовываться будет не заметно для глаза (хотя все равно надо эксперементировать). Это лучше, чем за один проход но бОльшую площадь. Пожалуй так и буду делать в ближайшее время.
А по поводу "Почему бы не использовать что-то другое?" - не мое решение, увы. Хотят олдскул в современной нотации - будем делать. Я бы ограничился "закосом" под семисегментник, благо 3-х разрядов хватает с головой и оно как-то нагляднее.