也許大家一看標題就知道,又是老生常談了,在線生成LOGO其實就是在線生成圖片,原理聽起來很簡單:
1. new一個bitmap或類似之物;
2. 用一個graphic在上邊畫出你想要的東西;
3. 保存,顯示出來,大功告成。
今天要說的是生成中的一些細節問題。沒有真正做過,你可能永遠也不知道有這樣的問題。下邊提到的問題和代碼,希望對各位有所幫助。
本文的示例程序在https://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;