1

有一个固定大小的字符和一个应该将整个单词包装到下一行的文本,计算应该最接近正方形的拟合中心正方形的最佳算法会占用最少的空间并且对用户有好处?

屏幕是这样定义的

#define max_width 1024
#define max_height 768
#define char_width 10
#define char_height 16

以字符为单位计算生成的换行文本大小的函数

void calculate_wrapped_text_size( const char *text, int box_width_in_px, int &width_in_chars, &height_in_chars )
{
 ...
}

因此,给定输入 Line1 text longtext longtext anytext \nLine2 <... ...> 它将计算适合给定宽度的换行文本

void find_optimal_size( const char *text, int &optimal_width_in_px, int &optimal_height_in_px )
{
 ...
}

是否有任何标准方法来计算宽度和高度的最佳尺寸,以便它看起来最适合用户?我想走找到最小面积框的路径,然后迭代到边上差异最小的大小?

4

1 回答 1

0

您想到的“最小面积框”肯定只是一行 - 这不是您想要的。

首先,检查您是否需要自己编写换行算法,因为大多数 GUI 工具包,无论是原生的还是跨平台的(可以)为您执行此操作。

如果您需要自己执行此操作,请执行以下操作:计算您想要允许的最大线宽。基于显示窗口的宽度或基于该窗口中其他小部件的布局。

然后对于每一行:写到一个单词超过该最大宽度,该单词是第一个需要下一行的单词。

您必须考虑一些细节:首先,您的字母是否都具有相同的宽度(这将使字宽计算更容易)以及您认为哪些字符是字边界(空格、制表符、“-”) .

有一些极端情况需要考虑,例如,如果窗口太窄以至于某个特定单词即使是该行的第一个单词也不适合该怎么办:上面的算法只会不断添加越来越多的行;您必须在算法中添加一个特殊情况,如果一个单词是该行的第一个单词,则它可能不会被自动换行,而是必须被字符换行,即只需在该行中写入尽可能多的字符,并且留在下一行。

于 2013-06-15T20:56:24.417 回答