2016-11-01 8 views
-2

CODEA:紐が重なっていますか?

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文字列を描画する必要があります。 StringBは下線スタイルで、StringBはスタイルではありません。

CodeBはほぼ同じですが、stringAstringBは同じスタイルを共有しています。だから私はCodeAでテストしましたが、そのプログラムは両方の文字列が互いに重なっていることです。私が知っているかもしれない

+0

'DrawString()'は、1回の呼び出しで改行のみを処理します。ある呼び出しから次の呼び出しに状態を持ちません。したがって、複数の行に異なるスタイルで描画する必要がある場合は、 'DrawString()'を呼び出すたびに文字列を正しく描画する場所を指定する必要があります。関連情報および追加情報へのリンクについては、重複したマークを参照してください。 –

答えて

0

codeAの問題は、stringAとstringBの両方がまったく同じ位置に描かれていることです。

graphics.DrawString文字列をイメージに変換して紙に印刷します。 "\ n"は文字列がイメージに変換されても意味を持ちません。印刷されず、改行も作成されません。実際、紙には「線」はありません。ちょうどイメージ。

文字列Bに異なる位置を付ける必要があります。 Graphics.MeasureString (String, Font)を使用してstringAのサイズを測定し、結果に応じてstringBの位置を調整します。

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); 
関連する問題