为了提供上下文,这个问题是关于一个Arduino项目,我有一个OLED显示屏(256x64),我想将一段文本分成多行(即“左对齐”)以适合OLED。 / p>
我将从我自己的函数调用中执行此操作,此处的问题是如何编写此函数。有很多方法可以给这只猫皮肤,但我正在寻找最明智和最优雅的方式。
我正在使用u8g图形库,它具有返回给定字体的字符串宽度的函数。它还可以返回字体的高度。那么,没有理由将行高传递到我的函数中,只有起始的x和y位置,文本以及包装文本的x位置。
问题1:这是明智的吗?
void drawMultiLine (char* text, byte startx, byte starty, byte endx)
我不考虑分页或滚动,因此不需要“endy”变量。
问题2:您将如何编写此功能?
您能否提供最有效的方法的顶级描述?
我并不关心单词太长而无法放在一行上的情况。无论如何它都可以在没有连字符的情况下断行,或者只是不包裹该单词(即超出边界)。
例如,我试过这个,但放弃了,因为它似乎太复杂了:
text[]
数组的每个字符,并将每个字符分配给缓冲区的等效数组索引buff[]
u8g.getStrWidth
返回到目前为止的字符串宽度u8g.getStrWidth(buff) > endx - startx
buff
中的文本将适合显示的宽度,但是我们要包装单词,因此从buff []数组的末尾向后追溯以找到第一个ASCII空间以上使用三个中间变量来跟踪索引,三个循环,我认为它通常不够优雅。