using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; namespace Eventech.DynPicture.Model { /// /// 图片文本坐标 /// public class ImageInfoCoordinate { /// /// 唯一构造函数(内部计算) /// /// 旋转中心点 /// 旋转角度(顺时针) /// 图片文本的尺寸 /// 水平定位方式 /// 垂直定位方式 public ImageInfoCoordinate(PointF origin, float angle, SizeF size, StringAlignment horiz = StringAlignment.Near, StringAlignment veriz = StringAlignment.Near) { _origin = origin; _angle = angle; _size = size; _horizAlignment = horiz; _vertiAlignment = veriz; //原始左上角坐标 _beforeLeftTop = PointF.Empty; switch (horiz) { case StringAlignment.Near: _beforeLeftTop.X = _origin.X; break; case StringAlignment.Center: _beforeLeftTop.X = _origin.X - _size.Width / 2f; break; case StringAlignment.Far: _beforeLeftTop.X = _origin.X - _size.Width; break; default: break; } switch (veriz) { case StringAlignment.Near: _beforeLeftTop.Y = _origin.Y; break; case StringAlignment.Center: _beforeLeftTop.Y = _origin.Y - _size.Height / 2f; break; case StringAlignment.Far: _beforeLeftTop.Y = _origin.Y - _size.Height; break; default: break; } _beforeRectf = new RectangleF(_beforeLeftTop, _size); _beforeRightTop = new PointF(_beforeLeftTop.X + _size.Width, _beforeLeftTop.Y); _beforeLeftBottom = new PointF(_beforeLeftTop.X, _beforeLeftTop.Y + _size.Height); _beforeRightBottom = new PointF(_beforeRightTop.X, _beforeLeftBottom.Y); _afterLeftTop = _origin.RotatePointF(_beforeLeftTop, _angle); _afterRightTop = _origin.RotatePointF(_beforeRightTop, _angle); _afterLeftBottom = _origin.RotatePointF(_beforeLeftBottom, _angle); _afterRightBottom = _origin.RotatePointF(_beforeRightBottom, _angle); } /// /// 旋转中心点 /// public PointF Origin { get { return _origin; } private set { _origin = value; } } private PointF _origin; /// /// 旋转角度 /// public float Angle { get { return _angle; } private set { _angle = value; } } private float _angle; /// /// 尺寸 /// public SizeF Size { get { return _size; } private set { _size = value; } } private SizeF _size; /// /// 水平方向 /// public StringAlignment HorizAlignment { get { return _horizAlignment; } private set { _horizAlignment = value; } } private StringAlignment _horizAlignment; /// /// 垂直方向 /// public StringAlignment VertiAlignment { get { return _vertiAlignment; } private set { _vertiAlignment = value; } } private StringAlignment _vertiAlignment; /// /// 旋转之前的矩形 /// public RectangleF BeforeRectf { get { return _beforeRectf; } private set { _beforeRectf = value; } } private RectangleF _beforeRectf; /// /// 旋转之前左上角点坐标 /// public PointF BeforeLeftTop { get { return _beforeLeftTop; } private set { _beforeLeftTop = value; } } private PointF _beforeLeftTop; /// /// 旋转之前右上点坐标 /// public PointF BeforeRightTop { get { return _beforeRightTop; } private set { _beforeRightTop = value; } } private PointF _beforeRightTop; /// /// 旋转之前左下角点坐标 /// public PointF BeforeLeftBottom { get { return _beforeLeftBottom; } private set { _beforeLeftBottom = value; } } private PointF _beforeLeftBottom; /// /// 旋转之前右下角坐标 /// public PointF BeforeRightBottom { get { return _beforeRightBottom; } private set { _beforeRightBottom = value; } } private PointF _beforeRightBottom; /// /// 旋转之后左上角点坐标 /// public PointF AfterLeftTop { get { return _afterLeftTop; } private set { _afterLeftTop = value; } } private PointF _afterLeftTop; /// /// 旋转之后右上角坐标 /// public PointF AfterRightTop { get { return _afterRightTop; } private set { _afterRightTop = value; } } private PointF _afterRightTop; /// /// 旋转之后左下角 /// public PointF AfterLeftBottom { get { return _afterLeftBottom; } private set { _afterLeftBottom = value; } } private PointF _afterLeftBottom; /// /// 旋转之后右下角 /// public PointF AfterRightBottom { get { return _afterRightBottom; } set { _afterRightBottom = value; } } private PointF _afterRightBottom; /// /// 获取图片文本坐标对象 /// /// 旋转中心点 /// 旋转角度(顺时针) /// 图片文本的尺寸 /// 水平定位方式 /// 垂直定位方式 /// 图片文本坐标对象 public static ImageInfoCoordinate GetCoordinate(PointF origin, float angle, SizeF size, StringAlignment horiz = StringAlignment.Near, StringAlignment veriz = StringAlignment.Near) { return new ImageInfoCoordinate(origin, angle, size, horiz, veriz); } } }