2010-12-12 8 views
10

Ich möchte eine bestimmte Zeichenfolge in einem bestimmten Winkel anzeigen. Ich habe versucht, dies mit der System.Drawing.Font Klasse zu tun. Hier ist mein Code:Wie wird Text in GDI + gedreht?

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

mir jemand helfen?

Antwort

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(); 

von here genommen.

10

können Sie die RotateTransform Methode (see MSDN) verwenden alle auf Graphics (einschließlich Text DrawString gezeichnet mit) Zeichnung angeben Rotation für. Die angle ist in Grad:

graphics.RotateTransform(angle) 

Wenn Sie nur eine einzige gedrehte Operation tun wollen, dann können Sie das in dem ursprünglichen Zustand zurückgesetzt Transformation von RotateTransform wieder mit negativen Winkeln Aufruf (alternativ Sie ResetTransform verwenden können, aber das wird alle Transformationen löschen, die Sie angelegt, die möglicherweise nicht, was Sie wollen):

graphics.RotateTransform(-angle) 
+0

ich dies bereits versucht, aber dann werden alle meine gezeichneten Grafiken gedreht. Das hilft nicht sehr. – eagle999

+2

@ eagle999 Verwenden Sie ResetTransform(), nachdem Sie fertig sind, den gedrehten Text zu zeichnen –

7

Wenn Sie eine Methode wollen an der Saiten Mittelposition eine gedrehte Schnur ziehen, versuchen Sie die folgende Methode:

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(); 
} 

Mit freundlichen Grüßen Hans Fräsen ...

+0

Sie sind der Held !! Vielen Dank. –

Verwandte Themen