重构字体图标显示,以期增加字体图标显示变化
This commit is contained in:
parent
b0ab6079f6
commit
8e3f95d961
@ -71,6 +71,26 @@ namespace Sunny.UI
|
||||
}
|
||||
}
|
||||
|
||||
private int _symbolRotate = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 字体图标旋转角度
|
||||
/// </summary>
|
||||
[DefaultValue(0)]
|
||||
[Description("字体图标旋转角度"), Category("SunnyUI")]
|
||||
public int SymbolRotate
|
||||
{
|
||||
get => _symbolRotate;
|
||||
set
|
||||
{
|
||||
if (_symbolRotate != value)
|
||||
{
|
||||
_symbolRotate = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Color symbolColor = Color.White;
|
||||
|
||||
/// <summary>
|
||||
@ -379,7 +399,7 @@ namespace Sunny.UI
|
||||
{
|
||||
if (Symbol > 0 && Image == null)
|
||||
{
|
||||
e.Graphics.DrawFontImage(Symbol, SymbolSize, GetSymbolForeColor(), ClientRectangle, SymbolOffset.X, SymbolOffset.Y);
|
||||
e.Graphics.DrawFontImage(Symbol, SymbolSize, GetSymbolForeColor(), ClientRectangle, SymbolOffset.X, SymbolOffset.Y, SymbolRotate);
|
||||
}
|
||||
|
||||
if (Image != null)
|
||||
@ -396,7 +416,7 @@ namespace Sunny.UI
|
||||
if (Symbol > 0 && Image == null)
|
||||
{
|
||||
e.Graphics.DrawFontImage(Symbol, SymbolSize, GetSymbolForeColor(),
|
||||
new RectangleF((Width - allWidth) / 2.0f, 0, ImageSize.Width, Height), SymbolOffset.X, SymbolOffset.Y);
|
||||
new RectangleF((Width - allWidth) / 2.0f, 0, ImageSize.Width, Height), SymbolOffset.X, SymbolOffset.Y, SymbolRotate);
|
||||
}
|
||||
|
||||
if (Image != null)
|
||||
@ -466,7 +486,7 @@ namespace Sunny.UI
|
||||
if (Symbol > 0 && Image == null)
|
||||
{
|
||||
e.Graphics.DrawFontImage(Symbol, SymbolSize, GetSymbolForeColor(),
|
||||
new Rectangle((int)left, (int)top, (int)ImageSize.Width, (int)ImageSize.Height), SymbolOffset.X, SymbolOffset.Y);
|
||||
new Rectangle((int)left, (int)top, (int)ImageSize.Width, (int)ImageSize.Height), SymbolOffset.X, SymbolOffset.Y, SymbolRotate);
|
||||
}
|
||||
|
||||
if (Image != null)
|
||||
|
@ -109,43 +109,22 @@ namespace Sunny.UI
|
||||
RectangleF rect, int xOffset = 0, int yOffSet = 0, int angle = 0)
|
||||
{
|
||||
SizeF sf = graphics.GetFontImageSize(symbol, symbolSize);
|
||||
graphics.DrawFontImage(symbol, symbolSize, color, rect.Left + ((rect.Width - sf.Width) / 2.0f).RoundEx(),
|
||||
rect.Top + ((rect.Height - sf.Height) / 2.0f).RoundEx() + 1, xOffset, yOffSet);
|
||||
}
|
||||
float left = rect.Left + ((rect.Width - sf.Width) / 2.0f).RoundEx();
|
||||
float top = rect.Top + ((rect.Height - sf.Height) / 2.0f).RoundEx();
|
||||
//graphics.DrawFontImage(symbol, symbolSize, color, left, top + 1, xOffset, yOffSet);
|
||||
|
||||
public static void DrawFontImage(this Graphics graphics, int symbol, int symbolSize, Color color, int angle,
|
||||
RectangleF rect, int xOffset = 0, int yOffSet = 0)
|
||||
{
|
||||
SizeF sf = graphics.GetFontImageSize(symbol, symbolSize);
|
||||
using Bitmap bmp = new Bitmap(symbolSize, symbolSize);
|
||||
using Graphics g = Graphics.FromImage(bmp);
|
||||
g.DrawFontImage(symbol, symbolSize, color, (symbolSize - sf.Width) / 2.0f, (symbolSize - sf.Height) / 2.0f);
|
||||
// 把画板的原点(默认是左上角)定位移到文字中心
|
||||
graphics.TranslateTransform(left + sf.Width / 2, top + sf.Height / 2);
|
||||
// 旋转画板
|
||||
graphics.RotateTransform(angle);
|
||||
// 回退画板x,y轴移动过的距离
|
||||
graphics.TranslateTransform(-(left + sf.Width / 2), -(top + sf.Height / 2));
|
||||
|
||||
using Bitmap bmp1 = RotateTransform(bmp, angle);
|
||||
graphics.DrawImage(angle == 0 ? bmp : bmp1,
|
||||
new RectangleF(rect.Left + (rect.Width - bmp1.Width) / 2.0f, rect.Top + (rect.Height - bmp1.Height) / 2.0f, bmp1.Width, bmp1.Height),
|
||||
new RectangleF(0, 0, bmp1.Width, bmp1.Height),
|
||||
GraphicsUnit.Pixel);
|
||||
}
|
||||
graphics.DrawFontImage(symbol, symbolSize, color, left, top, xOffset, yOffSet);
|
||||
|
||||
private static Bitmap RotateTransform(Bitmap originalImage, int angle)
|
||||
{
|
||||
// 创建新的位图,大小为旋转后的图片大小
|
||||
Bitmap rotatedImage = new Bitmap(originalImage.Height, originalImage.Width);
|
||||
|
||||
// 创建绘图对象
|
||||
using Graphics g = Graphics.FromImage(rotatedImage);
|
||||
|
||||
// 设置绘图参数,将原始图片旋转90°
|
||||
g.TranslateTransform(originalImage.Width / 2, originalImage.Height / 2);
|
||||
g.RotateTransform(angle);
|
||||
|
||||
g.DrawImage(originalImage,
|
||||
new Rectangle(-originalImage.Width / 2, -originalImage.Height / 2, originalImage.Width, originalImage.Height),
|
||||
new Rectangle(0, 0, rotatedImage.Width, originalImage.Height),
|
||||
GraphicsUnit.Pixel);
|
||||
g.TranslateTransform(-originalImage.Width / 2, -originalImage.Height / 2);
|
||||
return rotatedImage;
|
||||
graphics.TranslateTransform(left + sf.Width / 2, top + sf.Height / 2);
|
||||
graphics.RotateTransform(-angle);
|
||||
graphics.TranslateTransform(-(left + sf.Width / 2), -(top + sf.Height / 2));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
Loading…
x
Reference in New Issue
Block a user