引用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. GitHub创建项目,保存代码。

    平时学习会写一些代码,虽然只是零零散散的功能,但是基本都是在一个项目下操作,偶尔会忘记代码编辑顺序.国庆这几天在家,想把GitHub用起来,实现自己代码的可追溯,可查询.学习本篇博客,你需要一点的Gi ...

  2. day 08 课后作业

    # -*- coding: utf-8 -*-# @Time : 2018/12/27 17:27# @Author : Endless-cloud# @Site : # @File : day 8课 ...

  3. lnmp环境搭建错误集合

    错误1: 页面显示:No input file specified nginx错误日志:FastCGI sent in stderr: "PHP message: PHP Warning:  ...

  4. bzoj4842: [Neerc2016]Delight for a Cat

    bzoj4842 这是一道网络流的题(大家都看出来了吧) 首先我们简化一下题目,选出最关键的部分(就是知道什么和要求什么,还有条件) 我们在这里把睡觉设为0,至少有t0时间在睡觉,把打隔膜设为1,至少 ...

  5. java 实用Util汇总

    1.Util介绍 Util是工具的意思,一般来说,常常用来描述和业务逻辑没有关系的数据处理. Util一般要和私有方法对比:私有方法一般来说是只是在特地场景下使用的,私有方法越多,代码结构越乱.常见的 ...

  6. 防止过拟合:L1/L2正则化

    正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合).其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在tr ...

  7. Windows开发经验 - Visual Studio 2017

    1. 调试子进程 Visual Studio 2017及更早的版本原生不支持调试子进程,不确定未来是否会支持.可以通过官方插件让Visual Studio能够调试子进程. https://market ...

  8. 在windows上部署使用Redis--资料整理

    声明:一下只是针对windows系统,其他系统资料需自己补全. 很简单:下载.安装.安装桌面管理工具.测试.细不具表,下面几个网址应该足以解决你的所有问题. 网址访问专用Host: http://pa ...

  9. 《python灰帽子》学习笔记:调试器设置

    一.构造 C  数据类型 C Type | Python Type | ctypes Type ____________________________________________________ ...

  10. Linux常用命令之tr

    tr NAME tr - translate or delete characters 可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很 ...