using System; using System.Drawing; namespace LYFZ.OtherExpansion.SkinClass { public class ImageDrawRect { public static ContentAlignment anyRight = (ContentAlignment)1092; public static ContentAlignment anyTop = (ContentAlignment)7; public static ContentAlignment anyBottom = (ContentAlignment)1792; public static ContentAlignment anyCenter = (ContentAlignment)546; public static ContentAlignment anyMiddle = (ContentAlignment)112; public static void DrawRect(Graphics g, Bitmap img, Rectangle r, Rectangle lr, int index, int Totalindex) { if (img == null) { return; } int x = (index - 1) * img.Width / Totalindex; int y = 0; int x2 = r.Left; int y2 = r.Top; if (r.Height > img.Height && r.Width <= img.Width / Totalindex) { Rectangle r2 = new Rectangle(x, y, img.Width / Totalindex, lr.Top); Rectangle r3 = new Rectangle(x2, y2, r.Width, lr.Top); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x, y + lr.Top, img.Width / Totalindex, img.Height - lr.Top - lr.Bottom); r3 = new Rectangle(x2, y2 + lr.Top, r.Width, r.Height - lr.Top - lr.Bottom); if (lr.Top + lr.Bottom == 0) { r2.Height--; } g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x, y + img.Height - lr.Bottom, img.Width / Totalindex, lr.Bottom); r3 = new Rectangle(x2, y2 + r.Height - lr.Bottom, r.Width, lr.Bottom); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); return; } if (r.Height <= img.Height && r.Width > img.Width / Totalindex) { Rectangle r2 = new Rectangle(x, y, lr.Left, img.Height); Rectangle r3 = new Rectangle(x2, y2, lr.Left, r.Height); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x + lr.Left, y, img.Width / Totalindex - lr.Left - lr.Right, img.Height); r3 = new Rectangle(x2 + lr.Left, y2, r.Width - lr.Left - lr.Right, r.Height); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x + img.Width / Totalindex - lr.Right, y, lr.Right, img.Height); r3 = new Rectangle(x2 + r.Width - lr.Right, y2, lr.Right, r.Height); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); return; } if (r.Height <= img.Height && r.Width <= img.Width / Totalindex) { Rectangle r2 = new Rectangle((index - 1) * img.Width / Totalindex, 0, img.Width / Totalindex, img.Height - 1); g.DrawImage(img, new Rectangle(x2, y2, r.Width, r.Height), r2, GraphicsUnit.Pixel); return; } if (r.Height > img.Height && r.Width > img.Width / Totalindex) { Rectangle r2 = new Rectangle(x, y, lr.Left, lr.Top); Rectangle r3 = new Rectangle(x2, y2, lr.Left, lr.Top); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x, y + img.Height - lr.Bottom, lr.Left, lr.Bottom); r3 = new Rectangle(x2, y2 + r.Height - lr.Bottom, lr.Left, lr.Bottom); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x, y + lr.Top, lr.Left, img.Height - lr.Top - lr.Bottom); r3 = new Rectangle(x2, y2 + lr.Top, lr.Left, r.Height - lr.Top - lr.Bottom); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x + lr.Left, y, img.Width / Totalindex - lr.Left - lr.Right, lr.Top); r3 = new Rectangle(x2 + lr.Left, y2, r.Width - lr.Left - lr.Right, lr.Top); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x + img.Width / Totalindex - lr.Right, y, lr.Right, lr.Top); r3 = new Rectangle(x2 + r.Width - lr.Right, y2, lr.Right, lr.Top); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x + img.Width / Totalindex - lr.Right, y + lr.Top, lr.Right, img.Height - lr.Top - lr.Bottom); r3 = new Rectangle(x2 + r.Width - lr.Right, y2 + lr.Top, lr.Right, r.Height - lr.Top - lr.Bottom); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x + img.Width / Totalindex - lr.Right, y + img.Height - lr.Bottom, lr.Right, lr.Bottom); r3 = new Rectangle(x2 + r.Width - lr.Right, y2 + r.Height - lr.Bottom, lr.Right, lr.Bottom); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x + lr.Left, y + img.Height - lr.Bottom, img.Width / Totalindex - lr.Left - lr.Right, lr.Bottom); r3 = new Rectangle(x2 + lr.Left, y2 + r.Height - lr.Bottom, r.Width - lr.Left - lr.Right, lr.Bottom); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); r2 = new Rectangle(x + lr.Left, y + lr.Top, img.Width / Totalindex - lr.Left - lr.Right, img.Height - lr.Top - lr.Bottom); r3 = new Rectangle(x2 + lr.Left, y2 + lr.Top, r.Width - lr.Left - lr.Right, r.Height - lr.Top - lr.Bottom); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); } } public static void DrawRect(Graphics g, Bitmap img, Rectangle r, int index, int Totalindex) { if (img == null) { return; } int width = img.Width / Totalindex; int height = img.Height; int x = (index - 1) * width; int y = 0; int x2 = r.Left; int y2 = r.Top; Rectangle r2 = new Rectangle(x, y, width, height); Rectangle r3 = new Rectangle(x2, y2, r.Width, r.Height); g.DrawImage(img, r3, r2, GraphicsUnit.Pixel); } public static Rectangle HAlignWithin(Size alignThis, Rectangle withinThis, ContentAlignment align) { if ((align & ImageDrawRect.anyRight) != (ContentAlignment)0) { withinThis.X += withinThis.Width - alignThis.Width; } else { if ((align & ImageDrawRect.anyCenter) != (ContentAlignment)0) { withinThis.X += (withinThis.Width - alignThis.Width + 1) / 2; } } withinThis.Width = alignThis.Width; return withinThis; } public static Rectangle VAlignWithin(Size alignThis, Rectangle withinThis, ContentAlignment align) { if ((align & ImageDrawRect.anyBottom) != (ContentAlignment)0) { withinThis.Y += withinThis.Height - alignThis.Height; } else { if ((align & ImageDrawRect.anyMiddle) != (ContentAlignment)0) { withinThis.Y += (withinThis.Height - alignThis.Height + 1) / 2; } } withinThis.Height = alignThis.Height; return withinThis; } } }