2016-11-01 7 views
-2

Codea:Drawstring перекрывает друг друга?

Image imageChipsetName = new System.Drawing.Bitmap(photoWidth, photoHeight); 

StringFormat strFormat = new StringFormat(); 
strFormat.Alignment = StringAlignment.Center; 
strFormat.LineAlignment = StringAlignment.Center; 

Graphics graphics = Graphics.FromImage(imageChipsetName); 
graphics.DrawString(stringA + "\n", 
        new Font("Tahoma", 14, FontStyle.Underline), Brushes.Black, 
        new RectangleF(0, 0, photoWidth, photoHeight), strFormat); 
graphics.DrawString(stringB, 
        new Font("Tahoma", 14), Brushes.Black, 
        new RectangleF(0, 0, photoWidth, photoHeight), strFormat); 

CodeB:

Image imageChipsetName = new System.Drawing.Bitmap(photoWidth, photoHeight); 

StringFormat strFormat = new StringFormat(); 
strFormat.Alignment = StringAlignment.Center; 
strFormat.LineAlignment = StringAlignment.Center; 

Graphics graphics = Graphics.FromImage(imageChipsetName); 
graphics.DrawString(stringA + "\n"+stringB, 
        new Font("Tahoma", 14, FontStyle.Underline), Brushes.Black, 
        new RectangleF(0, 0, photoWidth, photoHeight), strFormat); 

Мне нужно нарисовать 2 строку в поле. StringA с подчеркиванием, в то время как StringB этого не делает.

CodeB почти достигают того, чего я хочу, но stringA и stringB обмена в том же стиле. Поэтому я протестировал с помощью CodeA, но программа с ним заключается в том, что обе строки перекрывают друг друга. Могу ли я знать

+0

'DrawString()' будет обрабатывать разрывы строк только за один вызов. Он не переносит состояния от одного вызова к другому. Поэтому, если вам нужно рисовать с разными стилями на нескольких строках, вам нужно указать местоположение, чтобы правильно рисовать строку для каждого вызова в 'DrawString()'. См. Отмеченный дубликат для получения подробной информации и ссылок на дополнительную информацию. –

ответ

0

Проблема с codeA заключается в том, что как stringA, так и stringB рисуются в той же самой позиции.

graphics.DrawString превращает строку в изображение и печатает ее на бумаге. «\ n» не имеет никакого значения, как только строка превращается в изображение. Он не будет напечатан и не создаст новую строку. На самом деле на бумаге нет «строк». Просто изображение.

Вам необходимо указать строчку В в другом положении. Используйте Graphics.MeasureString (String, Font) для измерения размера строки A, затем отрегулируйте положение строки в соответствии с результатом.

Image imageChipsetName = new System.Drawing.Bitmap(photoWidth, photoHeight); 

StringFormat strFormat = new StringFormat(); 
strFormat.Alignment = StringAlignment.Center; 
strFormat.LineAlignment = StringAlignment.Center; 
Font strFontA = new Font("Tahoma", 14, FontStyle.Underline);//Font used by stringA 


Graphics graphics = Graphics.FromImage(imageChipsetName); 
graphics.DrawString(stringA + "\n", 
        strFont_A, Brushes.Black, 
        new RectangleF(0, 0, photoWidth, photoHeight), strFormat); 

SizeF stringSizeA = new SizeF(); 
stringSizeA = Graphics.MeasureString(stringA, strFont_A);//Measuring the size of stringA 

graphics.DrawString(stringB, 
        new Font("Tahoma", 14), Brushes.Black, 
        new RectangleF(0, stringSizeA.Height, photoWidth, photoHeight - stringSizeA.Height), strFormat);