我正在尝试编写一个用于在矩形内部拟合字符串的算法,捕获的是每个字母是另一个矩形,是具有可修改尺寸的实际字母的图像。 我当前的算法只是减少每个字母矩形的宽度和高度,直到总宽度(所有字母宽度的总和)小于主矩形的宽度。这可以很好地将字符串拟合到一行,但换行是我的问题。
有关此主题的任何建议或参考都会有所帮助。
我在.net C#环境中工作。
感谢。
2)最终结果将使用自定义构建的渲染算法在图像上呈现。
3)当前拟合算法:
do
{
ratio -= 0.05f;
FinalHeight = (int)(height * ratio);
totalWidth = GetTotalWidth(FinalHeight, text);
}
while (totalWidth > DestRectangle.Width);
int GetTotalWidth(int Height, char[] Text)
{
int totalWidth = 0;
int spaces = 0;
float letterHeight = 0;
foreach (char c in Text)
{
if (Char.IsWhiteSpace(c))
{
spaces++;
continue;
}
BoundingRect bounds = GetBoundingRectangle(c);
float letterWidth = bounds.Width;
letterHeight = bounds.Height;
int width = (int)((letterWidth * Height) / letterHeight);
totalWidth += width;
}
totalWidth += (int)(spaces * (totalWidth / Text.Length));
return totalWidth;
}
答案 0 :(得分:0)
这似乎不是一个小问题。
我会尝试这种攻击方式:给定白色空格的位置,你可以枚举所有可能的短语片段(例如"这个","这是",&# 34;这是" ..."随机","随机文本",...)。对于N个单词,有N.(N + 1)/ 2种可能性。
对于每个片段,计算其实际宽度。然后确定自动换行,以便在其他行上不会超出此宽度。这会告诉您所需的行数。 (对于某些片段,这是不可能的。)
例如,片段"随机"应该产生
This is
a random
text to
fit
和"随机文字"
This is a
random text
to fit
现在你有一个边界框,你可以告诉它在给定的矩形中适合它的缩放因子(垂直或水平填充)。
最后,保持最大的缩放。