C# Graphics.DrawString动态调整(依据图片分辨率自适应)字体

需求

依据特定的区域及范围,可以为整个图片的分辨率或指定大小,使得整个字符串能够自适应进行最大字体填充

方案

查找缩放比例得到所需字体大小,封装成函数并调用

    private Font FindFont(  System.Drawing.Graphics g , string longString , Size Room , Font PreferedFont)
    {
        //you should perform some scale functions!!!
        SizeF RealSize = g.MeasureString(longString, PreferedFont);
        float HeightScaleRatio = Room.Height / RealSize.Height;
        float WidthScaleRatio = Room.Width / RealSize.Width;
        float ScaleRatio = (HeightScaleRatio < WidthScaleRatio) ? ScaleRatio = HeightScaleRatio : ScaleRatio = WidthScaleRatio;
        float ScaleFontSize = PreferedFont.Size * ScaleRatio;
        return new Font(PreferedFont.FontFamily, ScaleFontSize);
    }

调用函数获取适合的字体Font对象

 Bitmap bitmap = new Bitmap(800, 110);
            using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap))
            using (Font font1 = new Font("Arial", 120, FontStyle.Regular, GraphicsUnit.Pixel))
            {
                Rectangle rect1 = new Rectangle(0, 0, 800, 110);

                StringFormat stringFormat = new StringFormat();
                stringFormat.Alignment = StringAlignment.Center;
                stringFormat.LineAlignment = StringAlignment.Center;
                graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;

                Font goodFont = FindFont(graphics, "Billy Reallylonglastnameinstein" , rect1.Size, font1);
                graphics.DrawString("Billy Reallylonglastnameinstein", goodFont, Brushes.Red, rect1, stringFormat);
            }
上一篇
下一篇