2012-03-17 68 views
2

我想2字符串添加到圖像如下:C#添加字符串圖像,用最大的字體大小

This is Text 
------------ 
------------ 
------------ 
--Other----- 

如何使用的最大字體大小可能不具有字符串熄滅一側的形象?

例如:如果文本太大則熄滅圖像::

This is Text That is too big 
------------ 
------------ 
------------ 
--Other----- 

回答

3

我寫了我以前的項目,該腳本通過計算它的尺寸爲每個字體大小以適應一些文字到圖像。當字體大小大於圖像的寬度時,會將字體大小降低0.1em,然後再次嘗試,直到文本適合圖像。下面的代碼:

public static string drawTextOnMarker(string markerfile, string text, string newfilename,Color textColor) 
    { 
     //Uri uri = new Uri(markerfile, UriKind.Relative); 
     //markerfile = uri.AbsolutePath; 
     //uri = new Uri(newfilename, UriKind.Relative); 
     //newfilename = uri.AbsolutePath; 
     if (!System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(newfilename))) 
     { 
      try 
      { 

       Bitmap bmp = new Bitmap(System.Web.HttpContext.Current.Server.MapPath(markerfile)); 
       Graphics g = Graphics.FromImage(bmp); 
       g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; 
       StringFormat strFormat = new StringFormat(); 
       strFormat.Alignment = StringAlignment.Center; 
       SolidBrush myBrush = new SolidBrush(textColor); 
       float fontsize = 10; 
       bool sizeSetupCompleted = false; 
       while (!sizeSetupCompleted) 
       {       
        SizeF mySize = g.MeasureString(text, new Font("Verdana", fontsize, FontStyle.Bold)); 
        if (mySize.Width > 24 || mySize.Height > 13) 
        { 
         fontsize-= float.Parse("0.1"); 
        } 
        else 
        { 
         sizeSetupCompleted = true; 
        } 
       } 

       g.DrawString(text, new Font("Verdana", fontsize, FontStyle.Bold), myBrush, new RectangleF(4, 3, 24, 8), strFormat); 
       bmp.Save(System.Web.HttpContext.Current.Server.MapPath(newfilename)); 
       return newfilename.Substring(2); 
      } 
      catch (Exception) 
      { 
       return markerfile.Substring(2); 
      } 
     } 
     return newfilename.Substring(2); 
    } 
+1

'fontsize- = float.Parse(「0.1」);',爲什麼不只是'fontsize - = 1.0f'? – Matthew 2012-03-17 05:47:15

+0

,因爲我正在學習C#,那是我的第一個月。 :)他們最後也這樣做。例如,我使用String mystring =「」;和我的朋友使用字符串mystring = String.Empty();當我問你爲什麼這樣做時,他說他習慣了。不同的方法,相同的結果。 – 2012-03-17 05:53:24

+0

和BTW,mysize.width> 24 || mysize.height> 13定義了硬編碼的圖像的大小。你應該改變它以適應你的需求。 – 2012-03-17 05:55:03

1

這裏是一個快速的解決方案:

using (Graphics g = Graphics.FromImage(bmp)) 
{ 
    float width = g.MeasureString(text, font).Width; 
    float scale = bmp.Width/width; 
    g.ScaleTransform(scale, scale); //Simple trick not to use other Font instance 
    g.DrawString(text, font, Brushes.Black, PointF.Empty); 
    g.ResetTransform(); 
    ... 
} 

您的文字也不會總是100%的寬度,如果你使用TextRenderingHint.AntiAliasGridFit或相似的,但我認爲這不是您一個問題只是想確保文本alawys符合圖像。

+0

感謝您的幫助! – Aziz 2012-03-18 00:32:54