c# Graphics 根据设定宽度(像素或者毫米)来绘制单个文字,求解

lihui_life 2014-10-15 10:23:32
需求是这样的,c# 开发的winform 应用程序,有一个功能是让用户设置要绘制的文字大小,然后根据设定的大小通过Graphics 绘制文字,正常情况下是根据font来控制绘制的文字大小,那么现在要根据设定的宽,高来绘制文字,没思路了,有做过的大神没,说说思路或贴个代码吧,谢啦

比如 设置一个 宽为50像素,高为100像素的字,要怎么实现?
...全文
2337 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Afterwards_ 2014-12-23
  • 打赏
  • 举报
回复
创建宽高各100的bitmap,把文字绘制上去,然后根据你的需求缩放,把缩放后的图片绘制到你需要的地方.这么小的像素如果文字不是很多 会很快(半个屏幕应该不会卡).
lihui_life 2014-10-30
  • 打赏
  • 举报
回复
引用 9 楼 dongxinxi 的回复:
显示出来的宽、高除了与像素有关,还与DPI有关。 同样像素的图片在不同的DPI显示和打印出来的大小会不一样,玩过PS的都知道 Form.AutoScaleDimensions 设计时的屏幕DPI对应的像素 Form.CurrentAutoScaleDimensions 运行的时候的DPI对应的像素 在Winform中font的默认单位是Point(1/72英寸),正是LZ想样的 Graphic.MeasureString(str, Font实例) 得到某种字体的显示尺寸 不过这样频繁的去检测并不好,还是虚心接受版主的建议,把大致的转换比例算出来
是的, 寻求好的解决方案
  • 打赏
  • 举报
回复
显示出来的宽、高除了与像素有关,还与DPI有关。 同样像素的图片在不同的DPI显示和打印出来的大小会不一样,玩过PS的都知道 Form.AutoScaleDimensions 设计时的屏幕DPI对应的像素 Form.CurrentAutoScaleDimensions 运行的时候的DPI对应的像素 在Winform中font的默认单位是Point(1/72英寸),正是LZ想样的 Graphic.MeasureString(str, Font实例) 得到某种字体的显示尺寸 不过这样频繁的去检测并不好,还是虚心接受版主的建议,把大致的转换比例算出来
lihui_life 2014-10-27
  • 打赏
  • 举报
回复
还未解决 自己再顶下
lihui_life 2014-10-24
  • 打赏
  • 举报
回复
引用 6 楼 dzz_335481373 的回复:
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()); }
大神 你这文不对题啊,,
dzz_335481373 2014-10-24
  • 打赏
  • 举报
回复
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()); }
lihui_life 2014-10-24
  • 打赏
  • 举报
回复
问题还没解决,有哪位大神搞过吗?
lihui_life 2014-10-23
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
你先获得某个字号的高度,然后根据定义的区域高度,做个比例换算
 /// <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,跟缩放有关系?
bdmh 2014-10-23
  • 打赏
  • 举报
回复
你先获得某个字号的高度,然后根据定义的区域高度,做个比例换算
lihui_life 2014-10-23
  • 打赏
  • 举报
回复
引用 1 楼 wg5945 的回复:
http://stackoverflow.com/questions/2628725/autofit-label-font-size 参考一下~~
大神,好像不大适用哦
wg5945 2014-10-15
  • 打赏
  • 举报
回复

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧