csharp: 图片字符间距
引用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: 图片字符间距的更多相关文章
- 使用GDI+ DrawDriverString实现行距及字符间距控制
主要是要将一个标题和几段文字绘制到固定大小的图片上,如果一张放不下就生成多张.在使用DrawString是发现无法控制行距 namespace TibetTest { public class ...
- css 字间距离_css 字体字符间距设置
介绍下css 字间距,使用css来控制字与字之间距离,也叫css字间距方法. 使用到的css样式属性单词text-indent抬头距离,letter-spacing字与字间距. Css字间距.div ...
- 项目笔记---CSharp图片处理
原文:项目笔记---CSharp图片处理 项目笔记---CSharp图片处理 最近由于项目上需要对图片进行二值化处理,就学习了相关的图片处理上的知识,从开始的二值化的意义到动态阀值检测二值化等等,并用 ...
- WPF文字描边的解决方法(二)——支持文字竖排和字符间距调整
原文:WPF文字描边的解决方法(二)--支持文字竖排和字符间距调整 自前天格式化文本效果出来后,今天又添加文本竖排和调整字符间距的功能.另外,由于上次仓促,没来得及做有些功能的设计时支持,这次也调整好 ...
- [Windows] 输入字符间距变宽
今天在输入时,不会到误触到哪里,输入的字符间距变得很宽,如下图: 最后找到原因是不小心同时按下了 Shift+Space(空格),进入全角模式,就会导致输入的字符间距变宽 想要恢复,再按一次 shif ...
- css 字间距、CSS字体间距、css 字符间距设置
1.text-indent设置抬头距离css缩进 2.letter-spacing来设置字与字间距_字符间距离,字体间距css样式
- Office2016打开doc字符间距过小
缺少字体.........装上就行,放到windows/fonts目录下,自动安装了
- IDEA 在使用的过程中字符间距变大的问题
解决办法:shift+空格半角全角快捷键
- 字符型图片验证码识别完整过程及Python实现
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
随机推荐
- 30 个免费的 Sketch 必备插件
简评:中秋三天小长假,要不要学点啥?比如简单的设计?比如用 Sketch 做个项目? Sketch 有许多值得称赞的地方,其丰富的插件就是亮点之一.Sketch 的社区有着大量免费高效的插件.今天这篇 ...
- package.json和bower的参数解释
package.json和bower的参数解释 一.package.json解释: package.json是用来声明项目中使用的模块,这样新的环境部署时,只要在package.json文件所在的 ...
- docker安装Tomcat软件,部署项目
1 搜索tomcat镜像 $ sudo docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tom ...
- leetcode-79-单词搜索(用dfs解决)
题目描述: 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许 ...
- 架构师养成记--22.客户端与服务器端保持连接的解决方案,netty的ReadTimeoutHandler
概述 保持客户端与服务器端连接的方案常用的有3种 1.长连接,也就是客户端与服务器端一直保持连接,适用于客户端比较少的情况. 2.定时段连接,比如在某一天的凌晨建立连接,适用于对实时性要求不高的情况. ...
- sparksql连接mysql
1.方法1:分别将两张表中的数据加载为DataFrame /* * 方法1:分别将两张表中的数据加载为DataFrame * */ /* Map<String,String> option ...
- ZJOI2019 day2 游记
应该是打的最没有信仰的一次比赛了 然后这个垃圾水平居然还拿了170,真是有毒 我的语文并不好所以还是写流水账吧 day-2 到了余姚,发现附近并没有什么好吃的,于是直接去kfc了 另外潮湿的空气对呼吸 ...
- SpringMVC的 @RestController和@Controller 区别
@RestController注解,相当于@Controller+@ResponseBody两个注解的结合, 返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestCon ...
- [转] Elasticsearch 6.1官方入门教程
一篇比较简要又全面的elasticsearch教程. https://blog.csdn.net/hololens/article/details/78932628
- RocketMQ学习笔记(一)eclipse版的quickstart
学而时习之,不亦说乎! 自己搭建个学习用的RocketMQ总是很麻烦,需要虚拟机环境,网络,需要安装rocketmq,启动.时间久了再去看,又不知道这个虚拟机是干嘛的了. 直接在eclipse中启动, ...