for (height = bmp.Height - 1; height > 1; height -= frequency)
{
for (width = bmp.Width - 1; width > 1; width -= frequency)
{
c = bmp.GetPixel(width, height);
if (c.Name.Length > 0 && c.Name != "0")
{
ret[1] = height;
goOut = true;
break;
}
else
{
goOut = false;
}
}
if (goOut)
break;
}
return ret;
}
在画图之前,用这个方法确定精确的字体高度,这样的染色的时候才不至于走样。大家可以通过http://www.ladysolution.cn/logo.aspx 生成图片看一下效果。如果用GDI+自带的计算高度的方法,比如GetHeight()和Height属性,在blend的时候换个字体必定有误差。
二。 画倒影, RotateFlip依然是主力
倒影倒是很简单,把BLEND设好,定位好,画出来就行:
Create mirror#region Create mirror
……。
Graphics gBack_mirror = Graphics.FromImage(backImage_mirror);
pStart = new Point(1, -pre[0]);
pEnd = new Point(1, pre[1] - pre[0]);
LinearGradientBrush backColor_mirror = new LinearGradientBrush(pStart, pEnd, Color.White, endColor);
……
gBack_mirror.DrawString(logoText, logoFont, backColor_mirror, new PointF(。0f, -pre[0]));
……
gBack.DrawImage(backImage_mirror, new Point(0, pre[1]+3));
#endregion
三。 计算好你的下笔点,通过第一点中的方法,可以拿到某字体在某size时的实际高度有多少,这样我们在画笔或写字之前通过调用此方法就可以得出你的着笔点的坐标:
private static int[] prerendText(int LogoWidth, int LogoHeight, string logoText, Font logoFont)
{
Bitmap bp = new Bitmap(LogoWidth, LogoHeight);
Graphics g = Graphics.FromImage(bp);
g.DrawString(logoText, logoFont, SystemBrushes.Info, new PointF(。0f, .0f));
int[] ret = new int[2];
ret = GetRealFontHeight(bp);
g.Dispose();
bp.Dispose();
return ret;
}
此方法返回某字体在某size下的最上方坐标和最下方坐标,有了坐标就好办事了:
int[] pre = prerendText(LogoWidth, LogoHeight, logoText, logoFont);
……
Point pStart = new Point(1, pre[0]-2);
Point pEnd = new Point(1, pre[1]+2);
LinearGradientBrush backColor = new LinearGradientBrush(pStart, pEnd, startColor, endColor);
return filename;
使用这种方法,画出来的图会比只用GDI+画出来更漂亮些,颜色更准确些
专题:http://www.qqread.com/csharp/s393235.html相关专题
- 网站服务器的选型 (8290篇文章)
- .NET移动与嵌入式技术 (5963篇文章)
- .NET开发手册 (5664篇文章)
- C#变得越来越臃肿是不可避免的? (7次浏览)
- C#与EXCEL的数据交互(一) (5次浏览)
- C# 3.0新特性之扩展方法 (1次浏览)
- C#调用QTP自动化对象模型的实例 (0次浏览)
- 利用 C# 实现任务栏通知窗口 (0次浏览)
- 深入C#学习系列之不可小瞧的using关键字 (0次浏览)
- 如何用.NET技术在线生成网站LOGO (0次浏览)
- C#实现遗传算法 模拟花朵的进化 (0次浏览)
- c#里的运算符重载 (0次浏览)
- QTP调用自己开发的.net类库 (0次浏览)



