如何获得可以充满指定Rectangle的最大字体,请高手给个思路

问题描述

比如我有一个字符串“007”,我还有一个长100,高50的Rectangle,问题是我如何才能获得一个合适的字体大小使“007”这三个字符充满这个Rectangle最化大显示呢?即不会超出范围也不会自动换行,求高手,先谢过了!我写了一个类,但是还是不能实现我想要的功能:我期望是这样的:现实很骨感,是这样的:代码如下,请高手帮我改一下吧PublicClassForm1PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimmyGraphicsAsGraphicsDimmyRectangleAsRectangleDimmyPenAsNewPen(Color.Blue)myGraphics=Me.CreateGraphics()myRectangle=NewRectangle(x:=10,y:=10,width:=200,height:=100)'drawrectanglefrompenandrectangleobjectsmyGraphics.DrawRectangle(pen:=myPen,rect:=myRectangle)DimtitleBox=NewRenderInBox(myRectangle,Me,TextBox1.Text,"Tahoma",200)titleBox.Render(myGraphics,Brushes.Red)EndSubEndClassPublicClassRenderInBoxPrivateboxAsRectanglePrivaterootAsFormPrivatefontAsFontPrivatetextAsStringPrivateformatAsStringFormatPublicSubNew(boxAsRectangle,rootAsForm,textAsString,fontFamilyAsString,OptionalstartFontSizeAsInteger=150)Me.root=rootMe.box=boxMe.text=textDimgraphicsAsGraphics=root.CreateGraphics()DimfitsAsBoolean=FalseDimsizeAsInteger=startFontSizeDoIffontIsNotNothingThenfont.Dispose()EndIffont=NewFont(fontFamily,size,FontStyle.Regular,GraphicsUnit.Pixel)DimstringSizeAsSizeF=graphics.MeasureString(text,font,box.Width,format)fits=(stringSize.Height<box.Height)size-=1LoopWhileNotfitsgraphics.Dispose()format=NewStringFormat()With{.Alignment=StringAlignment.Center,.LineAlignment=StringAlignment.Center}EndSubPublicSubRender(graphicsAsGraphics,brushAsBrush)graphics.DrawString(text,font,brush,box,format)EndSubEndClass

解决方案

解决方案二:
可以看看http://www.myexception.cn/c-sharp/62044.html
解决方案三:
字体本身就有留白的
解决方案四:
引用楼主tulip811226的回复:

获得一个合适的字体大小使“007”这三个字符充满这个Rectangle最化大显示呢

首先,你可以自己定义一个“数字字体”文件。如果做不到,而且你也不知道将来要在运行时真正使用什么字体,甚至你也不知道要打印的除了数字以外还有没有其它符号,那么你只能用程序自动进行判断:先打印,然后按像素来获取打印效果,自己判断上下间距,然后清空画布重新打印,反复重试。
解决方案五:
首先到网上搜一些专为数字而设计的字体文件,而不用自己瞎忙活。

时间: 2024-08-04 02:47:46

如何获得可以充满指定Rectangle的最大字体,请高手给个思路的相关文章

go语言-正则表达式不让指定重复字符匹配,求高手解答

问题描述 正则表达式不让指定重复字符匹配,求高手解答 50C 正则表达式不让 指定字符串的 指定连续重复个数以上 通过比如:我指以数字组成定长度为10以内的字符串,指定不允许连续6个数字及以上通过1233444444 这个不让通过1433333332 这个不让通过1531224154 这个让通过4135353331 这个让通过要求:不用预查功能因为用的go语言,这种?! ?>= ?=影响效率语法不让通过服务器端写死的,只能用一个正则筛选.求高手解答. 解决方案 1{610}|2{610}|3{6

Datagrid如何指定特定行的字体颜色?

问题描述 如题,网页上有个Datagrid,是用来显示查询得到的成绩的,我想在成绩小于60的时候,把这一行的字体显示成红色(也可以单单成绩这个单元格显示红色)我在后台事件中可以实现用斜体.粗体来显示,就是不能改变字体颜色,很苦闷,请指教!PublicSubdgList_ItemDataBound(ByValsenderAsSystem.Object,ByValeAsSystem.Web.UI.WebControls.DataGridItemEventArgs)Ife.Item.ItemType=

asp.net分页,用一个文本框输入页面,按钮跳转到指定的分页的页面

问题描述 datalist已经查询出结果,asp.net分页已写好,用一个文本框输入页面,按钮跳转到指定的分页的页面,分页已经写好,就是不知道怎么在文文本框输入页面后跳转到指定的分页的页面,请各位给个思路 解决方案 解决方案二:傳入參數pageIndex重新執行sql語句綁定到datalist解决方案三:传入参数是指,页面跳转的时候把参数带上吗?我要跳转到本页面的,参数怎么弄呢?解决方案四:文文本框输入页面后跳转到指定的分页的页面?在跳转按钮或者链接里面想跳转到:<inputid=p><

网页播放器 windowsmediaplay中控制从wmv的指定时间开始播放,指定时间停止播放_网页播放器

1.Mediaplay播放器插入方法 插入-媒体-ActiveX 属性设置: ClassID:CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 参数: URL:文件路径名称 PlayCount :整数 AutoStart :自动播放:1 不播放:0 fullScreen :是否自动全屏 0不1是 volume :0-100 代码 1.window.media.player <object classid="clsid:22D6F312-B0F6-11D0

php中获取指定IP的物理地址的代码(正则表达式)

自己搭建IP数据库占资源,而且更新不便,何不使用现成的IP查询呢?下面自己写了个获取IP物理地址的PHP代码(有一定的瑕疵,请高手不吝赐教) 复制代码 代码如下: <!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="UTF-8" /> <meta name="author" con

xmlhtp-微信支付:用ASP把xml格式post到https,出现【指定资源下载失败】

问题描述 微信支付:用ASP把xml格式post到https,出现[指定资源下载失败] strxml="<xml>" strxml=strxml&"<appid>wxb4df923b092389cf</appid>" strxml=strxml&"<attach>487396</attach>" strxml=strxml&"<body>12

求一个匹配包含指定字符串的html标签的正则表达式

问题描述 求一个匹配包含指定字符串的html标签的正则表达式 我遇到的问题是这样的,代码描述如下: <div class="wz_con"> <div class="art_remark">概述内容</div> <div>插入的图片</div> wz_con的要提取的内容 </div> 我想要获取 标签之间的内容,但不包含另外两个div及其内容,在不过滤的情况下,求一个正则表达式. 解决方案 [

vb.net打开excel并打印的时候如果选择指定打印机

问题描述 vb.net打开excel并打印的时候如果选择指定打印机 目前用vb.net打开excel文件并打印的时候用到xlsheet.printout()的时候系统总默认为默认的打印机~在之前用show printdialog调取打印机对话框并选择其中一个指定的打印机后还是没法让系统用指定的打印机打印,是不是我缺少了什么关键步骤,请高手指点下 解决方案 自己解决了,用printdialog捕获打印机名存入变量然后在打印时候用xlsheet.printout(activeprinter:=变量名

电脑保存单片机arduino传来的数据到指定目录如何实现?

问题描述 电脑保存单片机arduino传来的数据到指定目录如何实现? 请详细地说明一下数据传输的过程及保存的方法 我是新手 最好有图有代码