我想写一个函数,需要绘制一个字符串的图像。图像有1-5个文本框,每个文本框都有一个x,y,宽度和高度。这些细节是在我解析的XML文件中定义的,所以我可以访问每个盒子的这些细节。Graphics.DrawString到多个矩形
我的问题是我是否可以使用graphics.DrawString(或类似的)方法很容易地做到这一点。下面的示例函数将创建一个具有指定的x,y,宽度,高度的矩形,然后在其中绘制一个字符串。如果字符串不适合,它会截断。
public void DrawStringRectangleFormat(Graphics g)
{
// Create string to draw.
String drawString = "Sample Text is too long to fit into this tiny lil rectangle area right here";
// Create font and brush.
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
// Create rectangle for drawing.
float x = 150.0F;
float y = 150.0F;
float width = 200.0F;
float height = 50.0F;
RectangleF drawRect = new RectangleF(x, y, width, height);
// Set format of string.
StringFormat drawFormat = new StringFormat();
drawFormat.Alignment = StringAlignment.Center;
// Draw string to screen.
g.DrawString(drawString, drawFont, drawBrush, drawRect, drawFormat);
}
我想,而不是这是什么,是不是截断,它会停在最后装配字,并进入下一个矩形(文本框)。这样我可以使用所有可用的文本框。
有没有一种方法可以做到这一点?否则,我将需要实现我自己的drawString方法。
我想你会需要分割串入的话,请拨打['GraphicsMeasureString()'](https://msdn.microsoft.com/en-us/library/6xe5hazb %28v = vs.110%29.aspx?f = 255&MSPPError = -2147217396),并做到这一点很难。不*太*难,真的。给定一个元组列表{word,wordRect}',这是一个适合文本的简单循环。 –
我想你需要看'Graphics.MeasureCharacterRanges'来看看哪些单词需要被截断。该函数可用于计算字符串中字符组的字符串坐标(例如每个字)。如果您尝试对'Graphics.MeasureString'使用多个调用,那么恐怕由于字距(kerning)而导致结果不够精确。 – RogerN