上海网站制作,上海网页制作,上海网站制作公司,上海网页制作公司,网页制作公司,网站制作公司
 
 
上海网站制作,上海网站制作公司,上海网页制作,上海网页制作公司
 
  .com    .net 
  .cc     .org 
  .info   .biz 
  .cn       .com.cn
  .net.cn   .org.cn 
 
网站制作
网站制作
如何用.NET技术在线生成网站LOGO
发布时间:2008-2-5 作者:上海网站制作

也许大家一看标题就知道,又是老生常谈了,在线生成LOGO其实就是在线生成图片,原理听起来很简单: 上海网站制作
1. new一个bitmap或类似之物;上海网站制作

2. 用一个graphic在上边画出你想要的东西;

3. 保存,显示出来,大功告成.上海网站制作

今天要说的是生成中的一些细节问题.没有真正做过,你可能永远也不知道有这样的问题.下边提到的问题和代码,希望对各位有所帮助.上海网站制作

本文的示例程序在http://www.ladysolution.cn/logo.aspx

一. 字体位置.

用不同的字体,如果通过计算字体高度来给字体定位是不精确的,不同的字体有不同的em baseline,而且descending 和 ascending 得出来的值几乎很难用来算精确高度,更麻烦的是如果字体是某人造的,那EM更靠不住,最大的问题是文字上方的空白目前我没有找到适合的公式来计算.我用的是比较笨的办法,计算精确的字体高度:上海网站制作


private static int[] GetRealFontHeight(Bitmap bmp)
{上海网站制作
int width, height;
int frequency = 2;// higher frequency gets lower performance.
int[] ret = new int[2];
Color c;
bool goOut = false;
for (height = 1; height < bmp.Height - 1; height += frequency)
{
for (width = 1; width < bmp.Width - 1; width += frequency)
{
c = bmp.GetPixel(width, height);
if (c.Name.Length>0 && c.Name != "0")//got it!
{
ret[0] = height;
goOut = true;
break;上海网站制作
}
else
{
goOut = false;
}
}
if (goOut)
break;上海网站制作
}

goOut = false;
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+画出来更漂亮些,颜色更准确些. 上海网站制作

 


上一篇: Photoshop教程:教你绘制MM飘逸的黑发 下一篇: asp.net页面中Menu控件下拉菜单被frame挡住

关于淘鑫 网站地图 联系我们 付款方式 人才招聘 友情连接 免费博客
Copyright 2004 - 2008 021-web.com.cn All Rights Reserved
版权所有 上海淘鑫网络科技有限公司 服务电话:021-54460388 54460389
信息产业部网站备案号: 沪ICP备06023403号

友情连接:上海网站建设 上海网站制作 上海网页制作 上海网站制作 上海网站制作公司 上海网页制作公司 上海网站建设 上海网站建设公司 上海网站制作 上海网站制作公司