2012-08-01 56 views
0

我想傳遞給一個DLL調用一些文本和字體細節(例如字體,大小)如何找出

一些文本的尺寸我要檢索的文本的寬度和高度像素

它必須是一個dll,因爲它正在從傳統的ASP

我知道有些事情就像TextMetrics叫,但不知道如何去在一個COM對象包裝這個。

我該如何做(請在C#中)?

+0

如果這是傳統的ASP,然後我相信,這是一個網站?如果是這樣,那麼這將取決於其他事情(如瀏覽器縮放以及客戶端上是否有所需的字體) – Justin 2012-08-01 12:59:37

回答

4

也許,你可以使用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; 
     } 
    } 
} 
+1

這不是WinForms特定的代碼。 – 2012-08-01 13:00:40

+1

這不起作用。圖形沒有靜態方法MeasureString。您必須指定Graphics類型的變量 – Artiom 2012-08-01 13:02:14

+0

該行:return System.Drawing.Graphics.MeasureString(text,font);給我一個錯誤:非靜態字段,方法或屬性需要對象引用 – Graham 2012-08-01 13:06:25

1

可能水木清華那樣(在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; 
} 
+0

這一個沒有錯誤 - 所以會用它作爲起點 - 謝謝 – Graham 2012-08-01 13:09:20