C#給畫布添加任意角度的文字

(一)先看效果

實現任意角度文本繪製:
在這裏插入圖片描述

(二)實現方法

使用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;
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章