对于Graphics.MeasureCharacterRanges,是否可以用CJK字体测量垂直包装的文本?
以下是我的尝试:
static public System.Drawing.RectangleF MeasureDisplayString(Graphics graphics, string text, Font font)
{
System.Drawing.StringFormat format = new System.Drawing.StringFormat(StringFormat.GenericTypographic);
format.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
format.FormatFlags |= StringFormatFlags.DirectionVertical;
System.Drawing.RectangleF rect = new System.Drawing.RectangleF(0, 0, 1000, 200);
CharacterRange[] ranges = { new System.Drawing.CharacterRange(0, text.Length) };
System.Drawing.Region[] regions = new System.Drawing.Region[1];
format.SetMeasurableCharacterRanges(ranges);
regions = graphics.MeasureCharacterRanges(text, font, rect, format);
rect = regions[0].GetBounds(graphics);
return rect;
}
如果我用支持CJK的字体来测量这几行文本,我在Mono中得到的结果与在Windows 10中的结果大不相同。在Mono中,我得到一个非常不同的盒子,它似乎只有一个宽文本行。
是否不支持StringFormatFlags.DirectionVertical等一些标志?是否有计划在未来支持他们?