解决方案 »

  1.   

    http://stackoverflow.com/questions/2628725/autofit-label-font-size参考一下~~
      

  2.   

     /// <summary>
            /// 根据设置的字体宽度和高度 获取字体大小
            /// </summary>
            /// <param name="s">字符串容器Size</param>
            /// <param name="P_String">字符串内容</param>
            /// <param name="sFontName">字体名称</param>
            /// <returns></returns>
            public Font GetFont(Size s, string P_String, Font oldFont)
            {
                Bitmap _bitmap = new Bitmap(s.Width, s.Height);
                Graphics _graphics = Graphics.FromImage(_bitmap);
                float fontsize = 0.1f;
                for (Size _size = new Size(); _size.Height <= s.Height ; fontsize += 0.1f)
                {
                    Font font_1 = new Font(oldFont.FontFamily.Name, fontsize);                _size = _graphics.MeasureString(P_String, font_1).ToSize();
                }
                _graphics.Dispose();
                if (oldFont.Bold)
                {
                    return new Font(oldFont.FontFamily.Name, fontsize - 0.2f, FontStyle.Bold);
                }
                else
                {
                    return new Font(oldFont.FontFamily.Name, fontsize - 0.2f);
                }
            }这是我的代码, 原理是根据设定的高度去对比文字的size,直到相同时 获取此时的字体大小,然后在进行
                    m.Scale((float)(CommonSettings.MillimeterConvertPixel(KuanDu)) / (float)(CommonSettings.MillimeterConvertPixel(GaoDu)), 1.0f, MatrixOrder.Append);
    缩放, 这个过程我把像素转换成了毫米,dpi是300算的,打印出来测试并不是我预测的毫米跨度啊,求解??
    比如我设置的5毫米,打印出来可鞥只有4,跟缩放有关系?
      

  3.   

    Graphics制作实心画笔绘制单个文字
      protected void Page_Load(object sender, EventArgs e)
        {
            Bitmap bitmap = new Bitmap(300, 150);
            Graphics g = Graphics.FromImage(bitmap);
            g.Clear(Color.YellowGreen);
            Font font1 = new Font("宋体", 12);   //设置字体类型和大小
            Brush brush = new SolidBrush(Color.Blue);  //设置画刷颜色
            Pen myPen = new Pen(Color.Blue, 5);  //创建画笔对象
            g.DrawString("GDI+绘制绘制实心画笔", font1, brush, 80, 5);
            SolidBrush mySolidBrush = new SolidBrush(Color.Green);
            g.FillEllipse(mySolidBrush, 20, 20, 220, 120);
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            Response.ClearContent();
            Response.ContentType = "image/Gif";
            Response.BinaryWrite(ms.ToArray());
        }
      

  4.   

    显示出来的宽、高除了与像素有关,还与DPI有关。
    同样像素的图片在不同的DPI显示和打印出来的大小会不一样,玩过PS的都知道Form.AutoScaleDimensions 设计时的屏幕DPI对应的像素
    Form.CurrentAutoScaleDimensions  运行的时候的DPI对应的像素
    在Winform中font的默认单位是Point(1/72英寸),正是LZ想样的
    Graphic.MeasureString(str, Font实例) 得到某种字体的显示尺寸 不过这样频繁的去检测并不好,还是虚心接受版主的建议,把大致的转换比例算出来
      

  5.   

    创建宽高各100的bitmap,把文字绘制上去,然后根据你的需求缩放,把缩放后的图片绘制到你需要的地方.这么小的像素如果文字不是很多 会很快(半个屏幕应该不会卡).