以前討論過在一張圖片上加上另一張圖片,說難也不難,基本上只要知道利用GDI+提供的DrawImage函數就可以了。現在需要在圖片上打上文字,其實也很簡單。貼圖用DrawImage,那麼貼文字當然就是DrawString啦。
//============================設定文字==============================
/**//// <summary>
/// 設定文字
/// </summary>
/// <param name="b">原始圖片</param>
/// <param name="txt">顯示的文字</param>
/// <param name="x">在圖片上的x座標</param>
/// <param name="y">在圖片上的y座標</param>
/// <returns>輸出後的圖片</returns>
public static Bitmap KiSetText(Bitmap b, string txt, int x, int y)
...{
if (b == null)
...{
return null;
}
Graphics g = Graphics.FromImage(b);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
// 作為示範,我們用Arial字型,大小為32,紅色。
FontFamily fm = new FontFamily("Arial");
Font font = new Font(fm, 32, FontStyle.Regular, GraphicsUnit.Pixel);
SolidBrush sb = new SolidBrush(Color.Red);
g.DrawString(txt, font, sb, new PointF(x, y));
g.Dispose();
return b;
}
當然,實際使用中當然希望自己靈活設定字型、顏色、大小等資訊。很簡單,根據上面的原理自己再改寫一個函數就行了。比如,
public static Bitmap KiSetText(Bitmap b, string txt, string TextFont,int TextSize, Color c, int x, int y)
...{
if (b == null)
...{
return null;
}
Graphics g = Graphics.FromImage(b);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
FontFamily fm = new FontFamily(TextFont);
Font font = new Font(fm, TextSize, FontStyle.Regular, GraphicsUnit.Pixel);
SolidBrush sb = new SolidBrush(c);
g.DrawString(txt, font, sb, new PointF(x, y));
g.Dispose();
return b;
}
如果我們利用VS2005提供的字型控制項,還可以簡化成
public static Bitmap KiSetText(Bitmap b, string txt, Font font,Color c,int x, int y)
{
if (b == null)
{
return null;
}
Graphics g = Graphics.FromImage(b);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
SolidBrush sb = new SolidBrush(c);
g.DrawString(txt, font, sb, new PointF(x, y));
g.Dispose();
return b;
}