2012-09-25 60 views
5
public static System.Drawing.Image GenerateGiftCard(String text, Font font, Color textColor) 
{ 
    System.Drawing.Image img = Bitmap.FromFile(@"G:\xxx\images\gift-card.jpg"); 
    Graphics drawing = Graphics.FromImage(img); 

    //measure the string to see how big the image needs to be 
    SizeF textSize = drawing.MeasureString(text, font); 

    //create a brush for the text 
    Brush textBrush = new SolidBrush(textColor); 

    float x, y; 

    x = img.Width/2 - textSize.Width/2; 
    y = img.Height/2 - textSize.Height/2; 

    drawing.DrawString(text, font, textBrush, x, y); 

    drawing.Save(); 

    textBrush.Dispose(); 
    drawing.Dispose(); 

    return img; 
} 

但是,此代碼生成的文本是「普通」而不是尺寸標註,並且它下面沒有陰影。如何在圖像上的文字下生成陰影

這是字體風格我想:

Beautiful characters

有什麼我可以做,以產生通過我的代碼相同的風格?

有誰知道如何使用SiteMapPath或ResolveURL對象將相對路徑轉移到物理路徑嗎?歡呼聲,

+1

[陰影](http://msdn.microsoft.com/en-us/library/xeawz664(V = VS.80)的.aspx) - 要創建陰影,文本被繪製兩次。第一次是灰色和偏移。第二次是黑色的。 – adatapost

+0

@AVD好主意,我現在就試試看,並讓你知道結果。 – Franva

+0

@AVD但如何做字體樣式? – Franva

回答

6

首先渲染陰影,方法是在偏移處用較暗的半透明畫筆繪製文本。陰影渲染後,覆蓋常規文本。

public static System.Drawing.Image GenerateGiftCard(String text, Font font, Color textColor, Color shadowColor, SizeF shadowOffset) 
{ 
    System.Drawing.Image img = Bitmap.FromFile(@"G:\xxxx\images\gift-card.jpg"); 
    Graphics drawing = Graphics.FromImage(img); 

    //measure the string to see how big the image needs to be 
    SizeF textSize = drawing.MeasureString(text, font); 

    //create a brush for the text 
    Brush shadowBrush = new SolidBrush(shadowColor); // <-- Here 
    Brush textBrush = new SolidBrush(textColor); 

    float x, y; 

    x = img.Width/2 - textSize.Width/2; 
    y = img.Height/2 - textSize.Height/2; 

    drawing.DrawString(text, font, shadowBrush, x + shadowOffset.Width, y + shadowOffset.Height); // <-- Here 
    drawing.DrawString(text, font, textBrush, x, y); 

    drawing.Save(); 

    textBrush.Dispose(); 
    drawing.Dispose(); 

    return img; 
} 
+0

thx爲您的答覆。你對字體風格有什麼想法嗎?另外,您是否知道如何使用SiteMapPath或ResolveURL對象將相對路徑轉換爲物理路徑?歡呼聲, – Franva

+0

我不知道字體樣式。我不認識它。如果你想解析一個URL,我肯定有一個堆棧溢出的問題,但如果你不想查找它,請嘗試'Server.MapPath(「〜/ path/file.ext」) '。 – Dan

+0

終於,Server.MapPath()是我正在尋找和它的作品。十分感謝你 :) – Franva