适合特定宽度的字符串长度
我确信我错过了一些明显的东西,我有一个我打算在其中绘制文本的区域。我知道它(区域)的高度和宽度。我想知道宽度可以容纳多少个字符/单词,最好是字符。第二个问题,如果该行太长,我想绘制第二条线,所以我想我还需要获取文本的高度,包括它认为正确的垂直填充是什么?
我还想知道相反的情况,即在特定宽度中可以容纳多少个字符。
我认为 WPF 不受像素限制这一事实会对答案产生一些影响?
最终,我计划将文本包裹在嵌入文本中的不规则形状图像周围。
任何指向正确方向的指针都会很棒。
谢谢
I'm sure I'm missing something obvious, I have an area in which I intend to draw text. I know its (the area) height and width. I wish to know how many characters/Words will fit in the width, characters preferably. Second question, If the line is too long I'll want to draw a second line, so I guess I need to get the height of the text as well, including what ever it considers the right vertical padding?
I'd also rather like to know the inverse, i.e. how many characters I can fit in a specific width.
I assume the fact that WPF isn't constrained to pixels will have some bearing on the answer?
Ultimately I'm planning on wrapping text around irregular shaped images embedded in the text.
Any pointers in the right direction would be great.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
对于 WPF,您可以使用 FormattedText 类来计算给定文本字符串将使用多少宽度 - 这将取决于实际文本。
示例:
获取给定宽度的子字符串(简化):
For WPF you can use the FormattedText class to calculate how much width a given text string will use - it will depend on the actual text.
Example:
Getting a sub string for a given width (simplified):
@BrokenGlass 的答案很好,但根据您的应用程序的特征,您可能会发现通过二分搜索可以获得更好的性能。如果大多数字符串都适合可用宽度,或者通常只需要修剪一两个字符,那么线性搜索是最好的。但是,如果您有很多将被严重截断的长字符串,则以下二分查找将效果很好。
请注意,availableWidth 和 fontSize 均以与设备无关的单位(1/96 英寸)指定。另外,请使用与您绘制文本的方式相匹配的 TextFormattingMode。
@BrokenGlass's answer is great, but depending on the characteristics of your application, you may find you get better performance with a binary search. If the majority of your strings fit in the available width, or generally only need to be trimmed by a character or two, then a linear search is best. However, if you have a lot of long strings that will be severely truncated, the following binary search will work well.
Note that both availableWidth and fontSize are specified in device-independent units (1/96ths of an inch). Also, use the TextFormattingMode that matches the way you draw your text.
这是不可能的,因为字符具有不同的长度,例如 W 比 i 宽得多(除非您使用像 Courier New 这样的字体)。
This is impossible because characters have different length, for example W is much wider than i (unless you're using a font like Courier New).