欢迎加我的QQ群:193522571,一起来讨论、交流!

c# 获得文字的像素宽度

Graphics graphics = CreateGraphics();  
SizeF sizeF = graphics.MeasureString(textBox1.Text, new Font("宋体", 9));
MessageBox.Show(string.Format("字体宽度:{0},高度:{1}", sizeF.Width, sizeF.Height));
graphics.Dispose();

  使用g.MeasureString()获得

使用MeasureString测量出来的字符宽度,总是比实际宽度大一些,而且随着字符的长度增大,貌似实际宽度和测量宽度的差距也越来越大了。查了一下MSDN,找到了下面这个理由:

MeasureString 方法旨在与个别字符串一起使用,它在字符串前后包括少量额外的空格供突出的标志符号使用。

            string str;
            str = "大";
            Font f = new Font("SimSun", 7F, System.Drawing.FontStyle.Regular);
            Graphics g = this.CreateGraphics();
            //单位为mm
            g.PageUnit = GraphicsUnit.Millimeter;
            SizeF sim = g.MeasureString(str, f);

2、使用TextRenderer.MeasureText获得,提供使用指定尺寸创建文本初始边框时,使用指定的设备上下文、字体和格式说明所绘制的指定文本的尺寸(以像素为单位)。

        private void MeasureText(PaintEventArgs e) 
        {
            string str;
            str = "大家好";
            Font f = new Font("SimSun", 7F, System.Drawing.FontStyle.Regular);
            Size sif = TextRenderer.MeasureText(e.Graphics, str, f, new Size(0, 0), TextFormatFlags.NoPadding);
            MessageBox.Show((sif.Width / pdi).ToString());
        }

        private void print(object sender, PaintEventArgs e)
        {
            MeasureText(e);
        }

posted @ 2016-04-23 18:07  swtool  阅读(9874)  评论(1编辑  收藏  举报
欢迎加我的QQ群:193522571,一起来讨论、交流!