引用WINDOWS API:

        [DllImport("gdi32.dll", CharSet = CharSet.Auto)]
public static extern int SetTextCharacterExtra(IntPtr hdc, int nCharExtra);//图片字符间距
[DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr handle);
[DllImport("gdi32.dll")]
public static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);

.NET 2.0

/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <param name="fontSpace"></param>
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Font font = new Font("宋体", 12.0F); Brush brush = Brushes.Red;
string text2 = "涂聚文";
IntPtr hdc = e.Graphics.GetHdc();
SetTextCharacterExtra(hdc, 16); // 设置字符间距
e.Graphics.ReleaseHdc(hdc);
e.Graphics.DrawString(text2, font, brush, 20, 25);// //pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
}

.NET 3.5以上:

 /// <summary>
/// 图片的字符间距(只对中文,数字,字母,符号有效,在中文环境下,中文日文混排无效)
/// 涂聚文
/// .net3.0以上
/// </summary>
/// <param name="width">图片宽度</param>
/// <param name="height">图片高度</param>
/// <param name="space">字间距</param>
/// <param name="strtext">要显示的文字</param>
/// <returns>图片</returns>
Bitmap CreateImageString(int width, int height,int space ,string strtext)
{
Bitmap image = new Bitmap(width, height);
using (Graphics g = Graphics.FromImage(image))
{
//绘制图片边框
//g.DrawRectangle(Pens.Black, 0, 0, width - 1, height - 1); Font font = new Font("宋体", 12.0F); Brush brush = Brushes.Red;
//绘制设置了字符间距的输出
DrawStringExtra(g, space, x =>
{
x.DrawString(strtext, font, brush, 0, 2);
});
}
return image;
} /// <summary>
///
/// </summary>
/// <param name="g"></param>
/// <param name="nCharExtra"></param>
/// <param name="action"></param>
void DrawStringExtra(Graphics g, int nCharExtra, Action<Graphics> action)
{
IntPtr hdc = g.GetHdc();
SetTextCharacterExtra(hdc, nCharExtra);
try
{
using (Graphics g1 = Graphics.FromHdc(hdc))
{
action(g1);
}
}
finally
{
SetTextCharacterExtra(hdc, 0);
g.ReleaseHdc(hdc);
}
}

调用:(可以应用于打印中)

 pictureBox1.Image = CreateImageStrin(100, 30, 10, "3315000");

.net 2.0自写填空格来设置字间距,高版本有:Padding,PadRight,PadLeft

 /// <summary>
/// 字符填充空格,而从设置字符间距
/// 涂聚文
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string SetPadstring(string str,int padwidth)
{
string s = string.Empty;
string m = string.Empty;
if (str.Length > 0)
{
char[] arr = str.ToCharArray();
foreach (char d in arr)
{
//MessageBox.Show(d.ToString());
m = m + d + PadRight(padwidth);
}
}
s = m;
return s;
} /// <summary>
/// 填充空格
/// </summary>
/// <param name="totalWidth"></param>
/// <returns></returns>
public string PadLeft(int totalWidth)
{
string s=""; if (totalWidth > 0)
{
for (int i = 0; i < totalWidth; i++)
{
s =" "+ s ;
}
}
return s;
} /// <summary>
/// 填充空格
/// </summary>
/// <param name="TotalWidth"></param>
/// <returns></returns>
public string PadRight(int TotalWidth)
{
string s = "";
if (TotalWidth > 0)
{
for (int i = 0; i < TotalWidth; i++)
{
s = s + " ";
}
} return s;
}

  

//测试

            string cs = "331500涂聚文";
//char[] arr = cs.ToCharArray();
//foreach (char d in arr)
//{
// //MessageBox.Show(d.ToString());
// m = m + d+PadRight(1);
//}
//MessageBox.Show(m);
MessageBox.Show(SetPadstring(cs, 1));

  

csharp: 图片字符间距的更多相关文章

  1. 使用GDI+ DrawDriverString实现行距及字符间距控制

    主要是要将一个标题和几段文字绘制到固定大小的图片上,如果一张放不下就生成多张.在使用DrawString是发现无法控制行距 namespace TibetTest {     public class ...

  2. css 字间距离_css 字体字符间距设置

    介绍下css 字间距,使用css来控制字与字之间距离,也叫css字间距方法. 使用到的css样式属性单词text-indent抬头距离,letter-spacing字与字间距. Css字间距.div ...

  3. 项目笔记---CSharp图片处理

    原文:项目笔记---CSharp图片处理 项目笔记---CSharp图片处理 最近由于项目上需要对图片进行二值化处理,就学习了相关的图片处理上的知识,从开始的二值化的意义到动态阀值检测二值化等等,并用 ...

  4. WPF文字描边的解决方法(二)——支持文字竖排和字符间距调整

    原文:WPF文字描边的解决方法(二)--支持文字竖排和字符间距调整 自前天格式化文本效果出来后,今天又添加文本竖排和调整字符间距的功能.另外,由于上次仓促,没来得及做有些功能的设计时支持,这次也调整好 ...

  5. [Windows] 输入字符间距变宽

    今天在输入时,不会到误触到哪里,输入的字符间距变得很宽,如下图: 最后找到原因是不小心同时按下了 Shift+Space(空格),进入全角模式,就会导致输入的字符间距变宽 想要恢复,再按一次 shif ...

  6. css 字间距、CSS字体间距、css 字符间距设置

    1.text-indent设置抬头距离css缩进 2.letter-spacing来设置字与字间距_字符间距离,字体间距css样式

  7. Office2016打开doc字符间距过小

    缺少字体.........装上就行,放到windows/fonts目录下,自动安装了

  8. IDEA 在使用的过程中字符间距变大的问题

    解决办法:shift+空格半角全角快捷键

  9. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

随机推荐

  1. Chrome 中删除单条浏览记录

    悲伤...之前用非隐私窗口观看了小电影.于是打开 chrome://settings/ ...... 现在才知道 windows 上使用 shift + del 即可删除该浏览记录 ....... 以 ...

  2. 给 console 添加颜色

    简评:使用 %c 声明可以给 console 的输出添加 CSS 样式,日志太多的话,给不同种类的日志设置不同的样式,可以极大的提升阅读体验. 什么是 %c %c: 标识将 CSS 样式应用于 %c ...

  3. eclipse首次使用的基本设置

    最近,一些刚开始学习Java的朋友使用eclipse遇到了一些编码导致的问题向我询问,那就总结一下首次安装eclipse后我们大体应该设置哪些基本东西吧~大神们呐就不用看啦. 一.修改工作空间默认编码 ...

  4. gettimeofday

    作用: 需要打印代码执行到某处的时间,或者需要计算程序执行的时间差(精确到微妙级).这时会用到gettimeofday函数,它可以返回自1970-01-01 00:00:00到现在经历的秒数. 原型: ...

  5. Spring集成ignite,服务发现问题

    问题: 解决办法: 修改C:\Windows\System32\drivers\etc\hosts 配置主机名和ip对应关系: 试试!

  6. vsftpd文件虚拟用户搭建

    关于vsftpd的原理这里就不多说了,下面红色部分有单独标出,突出显示,意思是这里的东西有额外的配置,全文的配置一定要跟着第二步的配置来,不要过程中随便改变参数,除非你看得懂,好了直接上配置过程 1. ...

  7. springcloud(八)-Hystrix熔断器

    雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者” ...

  8. 使用NHibernate(6)-- HQL && ICriteria 简单介绍

    1,HQL. HQL是NHibernate特有的查询方式,早先的java语法还没有类似Linq的Jinq,所以Hibernate就弄了一套自己的查询语言,NHibernate移植的时候把这种语言也一块 ...

  9. 【ORACLE】ORACLE session(会话)管理

    #查看当前不为空的连接select * from v$session where username is not null #查看不同用户的连接数 select username,count(user ...

  10. feignClient中修改ribbon的配置

    1.使用@FeignClient注解发现服务 服务提供者的controller: @RestController public class StudentController { @Autowired ...