我想2字符串添加到圖像如下:C#添加字符串圖像,用最大的字體大小
This is Text
------------
------------
------------
--Other-----
如何使用的最大字體大小可能不具有字符串熄滅一側的形象?
例如:如果文本太大則熄滅圖像::
This is Text That is too big
------------
------------
------------
--Other-----
我想2字符串添加到圖像如下:C#添加字符串圖像,用最大的字體大小
This is Text
------------
------------
------------
--Other-----
如何使用的最大字體大小可能不具有字符串熄滅一側的形象?
例如:如果文本太大則熄滅圖像::
This is Text That is too big
------------
------------
------------
--Other-----
我寫了我以前的項目,該腳本通過計算它的尺寸爲每個字體大小以適應一些文字到圖像。當字體大小大於圖像的寬度時,會將字體大小降低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);
}
這裏是一個快速的解決方案:
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符合圖像。
感謝您的幫助! – Aziz 2012-03-18 00:32:54
'fontsize- = float.Parse(「0.1」);',爲什麼不只是'fontsize - = 1.0f'? – Matthew 2012-03-17 05:47:15
,因爲我正在學習C#,那是我的第一個月。 :)他們最後也這樣做。例如,我使用String mystring =「」;和我的朋友使用字符串mystring = String.Empty();當我問你爲什麼這樣做時,他說他習慣了。不同的方法,相同的結果。 – 2012-03-17 05:53:24
和BTW,mysize.width> 24 || mysize.height> 13定義了硬編碼的圖像的大小。你應該改變它以適應你的需求。 – 2012-03-17 05:55:03