(一)先看效果
實現任意角度文本繪製:
(二)實現方法
使用
Matrix
類,這個類中的RotateAt
方法可以指定矩陣旋轉的中心位置
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
namespace TextRotate
{
//定義Canvas類
public class Canvas : IDisposable
{
public Graphics Graphics { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public void Dispose()
{
if(Graphics != null)
{
Graphics.Dispose();
Graphics = null;
}
}
/// <summary>
/// 繪製任意角度的文本
/// </summary>
/// <param name="text">需要繪製的文本</param>
/// <param name="point">文本繪製的位置</param>
/// <param name="font">文本字體格式</param>
/// <param name="brush">填充樣式</param>
/// <param name="angle">旋轉角度(順時針)</param>
public void DrawRotatedText(string text, PointF point, Font font, Brush brush, float angle)
{
Matrix matrix = Graphics.Transform;
matrix.RotateAt(angle, point);
Graphics.Transform = matrix;
Graphics.DrawString(text, font, brush, point);
matrix.RotateAt(-angle, point);
Graphics.Transform = matrix;
}
}
}
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace TextRotate
{
class Program
{
static void Main(string[] args)
{
//初始化畫布
Bitmap bitmap = new Bitmap(500, 500, PixelFormat.Format32bppArgb);
Canvas canvas = new Canvas();
canvas.Graphics = Graphics.FromImage(bitmap);
canvas.Width = bitmap.Width;
canvas.Height = bitmap.Height;
var font = new Font("黑體", 25);
var brush = new SolidBrush(Color.Red);
//繪製文本
canvas.DrawRotatedText("窮且益堅,不墜青雲之志", new PointF(30, 30), font, brush, 60);
//保存文本
bitmap.Save(@"D:\picture\first.jpg", ImageFormat.Png);
//釋放資源【防止內存的長時間佔用】
canvas.Dispose();
bitmap.Dispose();
}
}
}
注意:
如果只是將繪製的文本旋轉,而其他部分不動,則需要旋轉兩次:
public void DrawRotatedText(string text , Font font, Brush brush, PointF point, float angle = 0)
{
Matrix matrix = Graphics.Transform;
matrix.RotateAt(angle, point);
Graphics.Transform = matrix;
Graphics.DrawString(text, font, brush, point);
matrix.RotateAt(-angle, point);
Graphics.Transform = matrix;
}