我想傳遞給一個DLL調用一些文本和字體細節(例如字體,大小)如何找出
一些文本的尺寸我要檢索的文本的寬度和高度像素
它必須是一個dll,因爲它正在從傳統的ASP
我知道有些事情就像TextMetrics叫,但不知道如何去在一個COM對象包裝這個。
我該如何做(請在C#中)?
我想傳遞給一個DLL調用一些文本和字體細節(例如字體,大小)如何找出
一些文本的尺寸我要檢索的文本的寬度和高度像素
它必須是一個dll,因爲它正在從傳統的ASP
我知道有些事情就像TextMetrics叫,但不知道如何去在一個COM對象包裝這個。
我該如何做(請在C#中)?
也許,你可以使用Graphics.MeasureString。
將文本和字體作爲System.Drawing.Font對象傳遞。 該方法返回一個System.Drawing.SizeF對象。
希望它有幫助。
再見!
對不起,編輯:(ok..huge一個)
using System;
using System.Drawing;
namespace MeasureSize
{
class Program
{
static void Main(string[] args)
{
var size = GetTextSize("This is a test!", "Arial", 10, "normal", "bold");
Console.Write("Width: {0}/Heigth: {1}", size);
Console.ReadKey();
}
public static object[] GetTextSize(object value, object fontFamily, object size, object style, object weight)
{
if (value == null || fontFamily == null || size == null) { return new object[0]; }
var result = new object[2];
var text = value.ToString();
var font = default(Font);
var composedStyle = string.Concat(style ?? "normal", "+", weight ?? "normal").ToLowerInvariant();
var fontStyle = default(FontStyle);
switch (composedStyle)
{
case "normal+normal": fontStyle = FontStyle.Regular | FontStyle.Regular; break;
case "normal+bold": fontStyle = FontStyle.Regular | FontStyle.Bold; break;
case "italic+normal": fontStyle = FontStyle.Italic | FontStyle.Regular; break;
case "italic+bold": fontStyle = FontStyle.Italic | FontStyle.Bold; break;
}
font = new Font(fontFamily.ToString(), Convert.ToSingle(size), fontStyle, GraphicsUnit.Pixel);
using (var image = new Bitmap(1, 1))
using (var graphics = Graphics.FromImage(image))
{
var sizeF = graphics.MeasureString(text, font);
result[0] = Math.Round((decimal)sizeF.Width, 0, MidpointRounding.ToEven);
result[1] = Math.Round((decimal)sizeF.Height, 0, MidpointRounding.ToEven);
}
return result;
}
}
}
可能水木清華那樣(在ASP作品)
public static SizeF MeasureString(string s, Font font)
{
SizeF result;
using (var image = new Bitmap(1, 1))
{
using (var g = Graphics.FromImage(image))
{
result = g.MeasureString(s, font);
}
}
return result;
}
這一個沒有錯誤 - 所以會用它作爲起點 - 謝謝 – Graham 2012-08-01 13:09:20
這些MSDN鏈接應該provde你與你在找什麼爲: http://msdn.microsoft.com/en-us/library/y4xdbe66.aspx 和 http://msdn.microsoft.com/en-us/library/9bt8ty58.aspx
如果這是傳統的ASP,然後我相信,這是一個網站?如果是這樣,那麼這將取決於其他事情(如瀏覽器縮放以及客戶端上是否有所需的字體) – Justin 2012-08-01 12:59:37