Huong dan xoay text trong Csharp
Vẽ chữ xoay một góc nào đó trong C# thực sự là không quá khó. Bài này chúng ta sẽ được học cách thực hiện xoay chữ nhé các bạn.
Để thực hiện xoay chữ, chúng ta cần sử dụng phương thức RotateTransform() của đối tương Graphics. Khi vẽ ta dùng phương thức DrawString.
Quá trình xoay chữ thực hiện theo các bước như sau: Ban đầu vẽ chữ ở vị trí gốc, tiếp theo thực hiện xoay chữ, cuối cùng là di chuyển chữ đã xoay tới vị trí mong muốn.
Hàm DrawRotatedTextAt dưới đây sẽ thực hiện xoay chữ. Vẽ một chuỗi xoay một góc Angle độ so với vị trí ban đầu.
private void DrawRotatedTextAt(Graphics gr, float angle, string txt, int x, int y, Font the_font, Brush the_brush)
{
// Lưu lại trạng thái đồ họa gốc.
GraphicsState state = gr.Save();
gr.ResetTransform();
// Thực hiện xoay chữ.
gr.RotateTransform(angle); //angle là biến góc xoay
// Di chuyển tới vị trí mong muốn.
gr.TranslateTransform(x, y, MatrixOrder.Append);
// Vẽ chuỗi ký tự gốc.
gr.DrawString(txt, the_font, the_brush, 0, 0);
// Phục hồi trạng thái đồ họa gốc.
gr.Restore(state);
}
Trong hàm này, đầu tiên ta thực hiện lưu trạng thái của đối tượng Graphics trước khi thực hiện các thao tác khác, tới khi kết thúc ta sẽ thực hiện động tác phục hồi lại trạng thái ban đầu của đối tượng này.
Để vẽ trên Form1, ban đầu ta khai báo hàm DrawRotatedTextAt như trên, sau đó trong sự kiện Form1_Paint ta thêm đoạn mã sau:
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
using (Font the_font = new Font("Comic Sans MS", 20))
{
const int dx = 50;
int x = 50, y = 300;
DrawRotatedTextAt(e.Graphics, -70, "csharpcanban.com", x, y, the_font, Brushes.Red);
x += dx;
DrawRotatedTextAt(e.Graphics, -90, "csharpcanban.com", x, y, the_font, Brushes.Red);
x += dx;
DrawRotatedTextAt(e.Graphics, -30, "csharpcanban.com", x, y, the_font, Brushes.Red);
}
}
Lưu ý: Ta cần thêm các namespace sau vào ứng dụng
using System.Drawing.Drawing2D;
using System.Drawing.Text;
Toàn bộ code của ứng dụng như dưới đây:
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Windows.Forms; namespace XoayChu { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void DrawRotatedTextAt(Graphics gr, float angle, string txt, int x, int y, Font the_font, Brush the_brush) { // Lưu lại trạng thái đồ họa gốc. GraphicsState state = gr.Save(); gr.ResetTransform(); // Thực hiện xoay chữ. gr.RotateTransform(angle); //angle là góc xoay // Di chuyển tới vị trí mong muốn. gr.TranslateTransform(x, y, MatrixOrder.Append); // Vẽ chuỗi ký tự gốc. gr.DrawString(txt, the_font, the_brush, 0, 0); // Phục hồi trạng thái đồ họa gốc. gr.Restore(state); } private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; using (Font the_font = new Font("Comic Sans MS", 20)) { const int dx = 50; int x = 50, y = 300; DrawRotatedTextAt(e.Graphics, -70, "csharpcanban.com", x, y, the_font, Brushes.Red); x += dx; DrawRotatedTextAt(e.Graphics, -90, "csharpcanban.com", x, y, the_font, Brushes.Red); x += dx; DrawRotatedTextAt(e.Graphics, -30, "csharpcanban.com", x, y, the_font, Brushes.Red); } } } }
Chúc các bạn thành công !!!