mychar2g.cs

来自「C#编写的在线用户统计、在线编辑器、验证码图片」· CS 代码 · 共 219 行

CS
219
字号
/*
 * MyChar2G.cs @Microsoft Visual Studio 2008 <.NET Framework 2.0 (or Higher)>
 * AfritXia
 * 2008/5/21
 *
 * Copyright(c) http://www.AfritXia.NET/
 *
 */

using System;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace Net.AfritXia.Web.UI
{
	/// <summary>
	/// 自定义字符对象
	/// </summary>
	internal sealed class MyChar2G
	{
		// 字符
		private char m_charObj = '\0';
		// 字体
		private Font m_font;
		// 旧字体大小
		private Size m_oldSize;
		// 前景色
		private Brush m_foreColor;
		// 背景色
		private Brush m_backColor;
		// 旋转角度
		private float m_angle = 0.00f;

		#region 类构造器
		/// <summary>
		/// 类默认构造器
		/// </summary>
		public MyChar2G()
			: this('\0', new Font("system", 9.0f), Brushes.Black, Brushes.White)
		{
		}

		/// <summary>
		/// 类参数构造器
		/// </summary>
		/// <param name="c"></param>
		public MyChar2G(char c)
			: this(c, new Font("system", 9.0f), Brushes.Black, Brushes.White)
		{
		}

		/// <summary>
		/// 类参数构造器
		/// </summary>
		/// <param name="c"></param>
		/// <param name="fontFormat">字体格式</param>
		/// <param name="foreColor">前景色</param>
		/// <param name="backColor">背景色</param>
		public MyChar2G(char c, Font fontFormat, Brush foreColor, Brush backColor)
		{
			this.CharObj = c;
			this.Font = fontFormat;
			this.ForeColor = foreColor;
			this.BackColor = backColor;
		}
		#endregion

		/// <summary>
		/// 获取或设置字符
		/// </summary>
		public char CharObj
		{
			get
			{
				return this.m_charObj;
			}

			set
			{
				this.m_charObj = value;
			}
		}

		/// <summary>
		/// 获取或设置字体
		/// </summary>
		public Font Font
		{
			get
			{
				return this.m_font;
			}

			set
			{
				this.m_font = value;
			}
		}

		/// <summary>
		/// 获取或设置旧字体大小
		/// </summary>
		public Size OldSize
		{
			get
			{
				return this.m_oldSize;
			}

			set
			{
				this.m_oldSize = value;
			}
		}

		/// <summary>
		/// 获取或设置前景色
		/// </summary>
		public Brush ForeColor
		{
			get
			{
				return this.m_foreColor;
			}

			set
			{
				this.m_foreColor = value;
			}
		}

		/// <summary>
		/// 获取或设置背景色
		/// </summary>
		public Brush BackColor
		{
			get
			{
				return this.m_backColor;
			}

			set
			{
				this.m_backColor = value;
			}
		}

		/// <summary>
		/// 旋转角度
		/// </summary>
		public float Angle
		{
			set
			{
				this.m_angle = value;
			}

			get
			{
				return this.m_angle;
			}
		}

		/// <summary>
		/// 计算新字体大小
		/// </summary>
		/// <returns></returns>
		public Size ComputeNewSize()
		{
			// 将角度转换为 PI 角
			float pi_angle = Convert.ToSingle(this.Angle * Math.PI / 180.00f);

			// 声明新宽度, 新高度
			int newWidth = 0, newHeight = 0;

			// 计算新宽度, 新宽度的计算公式是 oldH * sin(r) + oldW * cos(r)
			newWidth += Convert.ToInt32(Math.Abs(this.OldSize.Height * Math.Sin(pi_angle)));
			newWidth += Convert.ToInt32(Math.Abs(this.OldSize.Width  * Math.Cos(pi_angle)));

			// 计算新高度, 新高度的计算公式是 oldH * cos(r) + oldW * sin(r)
			newHeight += Convert.ToInt32(Math.Abs(this.OldSize.Height * Math.Cos(pi_angle)));
			newHeight += Convert.ToInt32(Math.Abs(this.OldSize.Width  * Math.Sin(pi_angle)));

			return new Size(newWidth, newHeight);
		}

		/// <summary>
		/// 计算字符旋转后 x 轴左移量
		/// </summary>
		/// <returns></returns>
		public int ComputeLdx()
		{
			if (this.Angle <= 0)
				return 0;

			// 将角度转换为 PI 角
			float pi_angle = Convert.ToSingle(this.Angle * Math.PI / 180.00f);

			// 返回 x 轴左移量
			return Convert.ToInt32(Math.Abs(this.OldSize.Height * Math.Sin(pi_angle)));
		}

		/// <summary>
		/// 计算字符旋转后 y 轴上移量
		/// </summary>
		/// <returns></returns>
		public int ComputeTdy()
		{
			if (this.Angle >= 0)
				return 0;

			// 将角度转换为 PI 角
			float pi_angle = Convert.ToSingle(this.Angle * Math.PI / 180.00f);

			// 返回 x 轴左移量
			return Convert.ToInt32(Math.Abs(this.OldSize.Width * Math.Sin(pi_angle)));
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?