2010-12-12 102 views
10

我想以特定角度顯示給定的字符串。我試圖用System.Drawing.Font這個類來做到這一點。這裏是我的代碼:如何在GDI +中旋轉文本?

Font boldFont = new Font(FontFamily.GenericSansSerif, 12, FontStyle.Bold, GraphicsUnit.Pixel, 1, true);
graphics.DrawString("test", boldFont, textBrush, 0, 0);

誰能幫助我?

回答

16
String theString = "45 Degree Rotated Text"; 
SizeF sz = e.Graphics.VisibleClipBounds.Size; 
//Offset the coordinate system so that point (0, 0) is at the 
center of the desired area. 
e.Graphics.TranslateTransform(sz.Width/2, sz.Height/2); 
//Rotate the Graphics object. 
e.Graphics.RotateTransform(45); 
sz = e.Graphics.MeasureString(theString, this.Font); 
//Offset the Drawstring method so that the center of the string matches the center. 
e.Graphics.DrawString(theString, this.Font, Brushes.Black, -(sz.Width/2), -(sz.Height/2)); 
//Reset the graphics object Transformations. 
e.Graphics.ResetTransform(); 

here服用。

10

可以使用RotateTransform方法(see MSDN)爲所有借鑑Graphics(使用DrawString繪製包括文本)指定旋轉。該angle爲度:

graphics.RotateTransform(angle) 

如果你想要做的只是一個單一的旋轉操作,那麼您可以通過再次調用RotateTransform負角(或者重置變換到原來的狀態,您可以使用ResetTransform,但這將清除你應用了所有轉換你想要的東西可能不是):

graphics.RotateTransform(-angle) 
+0

我已經嘗試過這一點,但然後我所有繪製的圖形都會旋轉。這不是很有幫助。 – eagle999 2010-12-12 11:30:03

+2

@ eagle999使用ResetTransform()完成繪製旋轉後的文字 – 2013-01-19 02:37:02

7

如果你想有一個方法來繪製在琴絃中心位置旋轉的字符串,那麼試試下面的方法:

public void drawRotatedText(Bitmap bmp, int x, int y, float angle, string text, Font font, Brush brush) 
{ 
    Graphics g = Graphics.FromImage(bmp); 
    g.TranslateTransform(x, y); // Set rotation point 
    g.RotateTransform(angle); // Rotate text 
    g.TranslateTransform(-x, -y); // Reset translate transform 
    SizeF size = g.MeasureString(text, font); // Get size of rotated text (bounding box) 
    g.DrawString(text, font, brush, new PointF(x - size.Width/2.0f, y - size.Height/2.0f)); // Draw string centered in x, y 
    g.ResetTransform(); // Only needed if you reuse the Graphics object for multiple calls to DrawString 
    g.Dispose(); 
} 

問候 漢斯銑牀...

+0

你是英雄!謝謝。 – 2017-02-18 21:51:38