一段字符串中可能既有汉字又有字母,对于汉字和字母分别采用不同的字体进行绘制直接po代码了

 Bitmap bmp = new Bitmap(iWidth, iHeight);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.FillRectangle(new SolidBrush(Color.FromArgb(0, 90, 169)), new Rectangle(0, 0, bmp.Width, bmp.Height));
if (IFYY)
{
Font arial = new System.Drawing.Font("Arial", 46F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(134)));
StringFormat test = StringFormat.GenericTypographic;
SizeF size = g.MeasureString(strText, font, 1062, test);
float fX = (1062 - size.Width) / 2 + 348;
float fY = (58 - size.Height) / 2 + 960;
float rowSpace = 0f;
for (int i = 0; i < strText.Length; i++)
{
string ss = strText[i].ToString();
if (ISLetter(strText[i]))
{
SizeF sf = g.MeasureString(ss, arial);
g.DrawString(ss, arial, brushWhite, fX, fY);
if (ss == " ")
{
fX += g.MeasureString(ss, arial).Width + rowSpace;
}
else
{
fX += g.MeasureString(ss, arial, 100, test).Width + rowSpace;
}
//g.DrawString(strText[i].ToString(), arial, brushWhite, rectF, format);
}
else
{
g.DrawString(ss, font, brushWhite, fX, fY);
fX += g.MeasureString(ss, font, 100, test).Width + rowSpace;
}
//fX += rowSpace;
}
}
else
{
g.DrawString(strText, font, brushWhite, rectF, format);
} //g.DrawString(strText, arial, brushWhite, rectF, format);
g.Dispose();
bmp.RotateFlip(RotateFlipType.Rotate180FlipX);
return bmp;
} private static bool ISLetter(char c)
{
bool letter = false;
if (c > 127)
{
letter = false;
}
else
{
letter = true;
}
return letter;
}

 需要注意的是:

       StringFormat test = StringFormat.GenericTypographic;
SizeF size = g.MeasureString(strText, font, 1062, test);
Graphics.MeasureString()方法,一定要使用如图的形式,否则测算出来的字母宽度不精确

c# GDI+绘制不同字体的字符串的更多相关文章

  1. C#GDI+ 绘制线段(实线或虚线)、矩形、字符串、圆、椭圆

    C#GDI+ 绘制线段(实线或虚线).矩形.字符串.圆.椭圆 绘制基本线条和图形 比较简单,直接看代码. Graphics graphics = e.Graphics; //绘制实线 )) { pen ...

  2. 通过GDI+绘制 验证码

    只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 using System; using System.Collections.Generic; using Syste ...

  3. C#利用GDI+绘制旋转文字等效果

    C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...

  4. C# GDI绘制仪表盘(纯代码实现)

    纯代码实现GDI绘制仪表盘,效果在代码下面. public partial class HalfDashboardUc : UserControl { /// <summary> /// ...

  5. C# 使用GDI+绘制漂亮的MenuStrip和ContextMenuStrip皮肤

    通过上面的效果截图可以看到,重绘后的MenuStrip和ContextMenuStrip可以添加自己的LOGO信息,实现了类似OFFICE2007的菜单显示效果. .NET对菜单控件的绘制提供了一个抽 ...

  6. MFC 用gdi绘制填充多边形区域

    MFC 用gdi绘制填充多边形区域 这里的代码是实现一个三角形的绘制,并用刷子填充颜色 在OnPaint()函数里面 运用的是给定的三角形的三个点,很多个点可以绘制多边形 CBrush br(RGB( ...

  7. GDI绘制时钟效果,与系统时间保持同步,基于Winform

    2018年工作之余,想起来捡起GDI方面的技术,特意在RichCodeBox项目中做了两个示例程序,其中一个就是时钟效果,纯C#开发.这个CSharpQuartz是今天上午抽出一些时间,编写的,算是偷 ...

  8. 『备注』GDI+ 绘制文本有锯齿,透明背景文本绘制

    背景: GDI+ 绘制文本 时,如果 背景是透明的 —— 则会出现 锯齿. //其实,我不用这三个 属性 好多年了 //而且,这三个属性 在关键时刻还有可能 帮倒忙 //关键是:这三个属性,鸟用都没有 ...

  9. 如何使用GDI绘制半透明矩形

    /*使用GDI绘制半透明矩形*/ void CDirectXDraw::DrawHalfOpacityRect(HDC hdc,CRect rect) { CDC dc; dc.Attach(hdc) ...

随机推荐

  1. Java中Arrays作用

    Arrays类是提供对数组进行排序.查询和修改等操作方法的工具类.(Arrays:尽可进行数组升序排序) 格式:Arrays.sort(数组名); Package Java; import java. ...

  2. rbac组件之数据库设计(一)

    rbac是基于角色的权限设计,一共包含六张表,具体的表设计如下: from django.db import models class Menu(models.Model): "" ...

  3. Python使用selenium实现网页用户名 密码 验证码自动登录功能

    一.安装selenium 二.下载谷歌浏览器驱动 1.去http://chromedriver.storage.googleapis.com/index.html下载chromedriver.exe( ...

  4. 04001_HTML简单介绍

    1.超文本标记语言 (1)超文本:比普通文本功能更加强大: (2)标记语言:使用一组标签对内容进行描述的一门语言,它不是编程语言! 2.HTML语法和规范 (1)所有的html文件后缀名都是以.htm ...

  5. 解决EF 4.0 中数据缓存机制

    EF4.0默认开启缓存机制,如果想要禁用缓存机制的话,则须加上一句话:_db.CreateObjectSet().MergeOption = MergeOption.OverwriteChanges; ...

  6. C++——"%"运算符

    基本介绍 r=a%b,余数的取值范围为-b+1~b-1,符号与a一致 要想得到0~b-1的余数,可以用:(a%b+b)%b 数位拆解 方法一:反复的:%10,/10 sizea = 0; while ...

  7. BNUOJ 7178 病毒侵袭持续中

    病毒侵袭持续中 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 30 ...

  8. 解决Codeforces访问慢的本地方案

    参考: http://m.blog.csdn.net/blog/Xiangamp/42245923#

  9. [ C语言版 ] 数独计算器 [ 搜索剪枝法 ]

    [原创]转载请注明出处. [浙江大学 程序设计专题] 使用方法:按提示输入方式为9*9的矩阵,0表示未知数. 为解决这一问题,我们也尝试了两种方法,准确的说,是第一种方法太慢了,我们对它进行了优化. ...

  10. 【Tomcat】Tomcat Connector的三种运行模式【bio、nio、apr】

    Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行模式 bio bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O ...