GDI+獲取字符串實際的輸出像素值(高度和寬度)


簡單來說就是調用Graphics對象的MeasureString函數,下面是一個簡單的例子

//創建Graphics對象
CPaintDC dc(this);
Graphics gra(dc.m_hDC);

//首先創建字體相關
FontFamily fontFamily(L"Arial"); //字體
Font font(&fontFamily, 30, FontStyleRegular, UnitPixel); //30爲字號,就是文字的大小
PontF pointF(0,0f, 0,0f); //繪畫的x、y座標

WCHAR string[256];
wcscpy(string, L"28:sdf:的"); //字符串
RectF boundRect; //作爲MeasureString的參數,調用MeasureString後會把x、y、高度和寬度填入boundRect裏
gra.MeasureString(string, wcslen(string), &font, pointF, &boundRect);

獲取相關字體的高度還有一個方法,就是調用Font對象的GetHeight()函數,如下
Font font(&fontFamily, 30, FontStyleRegular, UnitPixel);
float height = font.GetHeight(&gra);

主意:GetHeight()獲得的高度跟gra.MeasureString函數獲得的高度是不同的。GetHeight()獲得的高度是該字體剛好的像素高度,而gra.MeasureString獲得的高度是包含該字符串的區域的高度,MSDN的說明是Pointer to a RectF object that receives the rectangle that bounds the string.

還有一些其他的方法可參看codeproject裏的帖子:
http://beta.codeproject.com/answers/56071/How-to-get-the-width-of-a-fixed-width-font-at-a-sp.aspx

http://bbs.csdn.net/topics/40456323

http://www.cnblogs.com/zhjzwl/archive/2009/03/26/1422000.html


C#中以像素作爲尺寸單位,像素是一種相對的尺寸概念,與毫米的轉換與當前顯示器的分辨率有關。在不同分辨率下轉換的係數不同

  C#(C#培訓 )中以像素作爲尺寸單位,像素是一種相對的尺寸概念,與毫米的轉換與當前顯示器的分辨率有關。在不同分辨率下轉換的係數不同。

  藉助GDI可以完成毫米至像素的轉換。

  public static double MillimetersToPixelsWidth(double length)

  { System.Windows.Forms.Panel p = new System.Windows.Forms.Panel();

  System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(p.Handle);

  IntPtr hdc = g.GetHdc();

  int width = GetDeviceCaps(hdc, 4); //HORZRES

  int pixels = GetDeviceCaps(hdc, 8);// BITSPIXEL

  g.ReleaseHdc(hdc);

  return (((double)pixels / (double)width) * (double)length);

  }

  [DllImport("gdi32.dll")]

  private static extern int GetDeviceCaps(IntPtr hdc, int Index);

  像素與毫米的轉換

  轉換還需要知道另一個參數:DPI(每英寸多少點)

  象素數 / DPI = 英寸數

  英寸數 * 25.4 = 毫米數

  對於顯示設備,不管是打印機還是屏幕,都有一種通用的方法

  先用GetDeviceCaps(設備句柄,LOGPIXELSX)

  或者 GetDeviceCaps(設備句柄,LOGPIXELSY)獲得設備每英寸的像素數

  分別記爲:px 和 py

  一英寸等於25.4mm

  那麼毫米換算成像素的公式爲

  水平方向的換算: x * px /25.4

  垂直方向的換算: y * py /25.4

  像素換算爲毫米 x * 25.4 / px

  在程序中這麼寫

  MyControl.Height := 10{mm} * PixelsPerInch * 10 div 254;

  分子和分母同乘以10,將浮點數運算轉化爲整數運算,效率更高

http://www.cnblogs.com/85538649/category/312491.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章