黄聪:C 如何通过MeasureString、Graphics获取字符串的像素...

C#是一门很强大的编程语言,首先我们需要清楚两个概念:

- 字符码与点阵码之间的转换关系;

- 绘图系统中字符串宽度的计算。

本文将分别介绍这两个概念,并详细介绍C#如何利用MeasureString、Graphics获取字符串的像素。

## 1.字符码与点阵码之间的转换关系

在计算机上,我们使用的是二进制数码,也就是0和1。在计算机的系统中,一个字符码通常都与一个或多个点阵码相关联。计算机根据字符码来查找与之对应的点阵码,在屏幕上显示相应的字符。字符码和点阵码之间的转换关系是非常重要的,因为我们需要利用这种转换关系来计算字符串的长度。

字符码的定义:字符码是计算机用来表示字符的标准。常见的字符码有ASCII码、Unicode等。ASCII码对于英文字符已经足够,但对于包含中文等字符时,就会出现问题。因此,Unicode被广泛地应用于计算机领域。

点阵码的定义:点阵码就是用一堆像素点来表示一个字符的图形,由于像素点数量的问题,所以点阵码通常只是用于显示器上以及一些小尺寸的打印机等设备上。

由于字符码和点阵码之间是一一对应的关系,因此我们可以利用字符码来计算一个字符串在屏幕或打印机上对应的像素个数。而计算这个像素个数,则需要用到咱们接下来要介绍的MeasureString。

## 2.MeasureString:获取字符串在绘制时所需的矩形大小

MeasureString方法是一个非常常见的方法,它可以帮助我们计算字符串在绘制时所需的矩形大小。这个方法有多种重载形式,使用方法也略有不同,可以根据自己的需求选择不同的重载方式。这里我们列举了三种常见的重载形式,以供参考:

1. public SizeF MeasureString(string text, Font font):返回一个SizeF对象,表示文本在指定字体下的大小。

示例代码:

```csharp

string str = "Hello World!";

Font font = new Font("微软雅黑", 12, FontStyle.Regular);

SizeF sizef = new SizeF();

using(Graphics graphics = CreateGraphics())

{

sizef = graphics.MeasureString(str, font);

}

```

2. public SizeF MeasureString(string text, Font font, SizeF layoutArea):将文本的大小尽可能调整到指定的区域,返回一个SizeF对象,表示文本的大小。

示例代码:

```csharp

string str = "Hello World!";

Font font = new Font("微软雅黑", 12, FontStyle.Regular);

SizeF layoutArea = new SizeF(100, 50);

SizeF sizef = new SizeF();

using(Graphics graphics = CreateGraphics())

{

sizef = graphics.MeasureString(str, font, layoutArea);

}

```

3. public SizeF MeasureString(string text, Font font, int width):指定字符串的宽度,计算出包含字符串的矩形高度,返回一个SizeF对象,表示文本的大小。

示例代码:

```csharp

string str = "Hello World!";

Font font = new Font("微软雅黑", 12, FontStyle.Regular);

int width = 100;

SizeF sizef = new SizeF();

using(Graphics graphics = CreateGraphics())

{

sizef = graphics.MeasureString(str, font, width);

}

```

以上三种重载形式仅仅是MeasureString方法的冰山一角,在实际开发中,还有更多的重载方式,需要我们根据实际需求来选择使用。通过MeasureString可以轻松地得到字符串的宽高,然后可以针对性地设置屏幕或打印机的宽度。

## 3.Graphics:实现字符串、绘图等相关的类

Graphics类是实现字符串、绘图等相关的类,所以它也是C#中常用的类之一。它提供了各种用于绘制文本、图形和图像等的方法,非常方便。我们可以利用Graphics实现字符串或绘制各种复杂的形状和图案。Graphics具有很多方法和属性,下面我们介绍一下其中比较常用的几个。

1. Clear():清除当前绘图面并以指定颜色填充。

2. DrawLine():绘制直线,需要指定起点、终点、画笔等参数。

3. DrawRectangle():绘制矩形,需要制定矩形的大小、画笔等参数。

4. DrawEllipse():绘制椭圆,需要指定所在的矩形、画笔等参数。

5. DrawString():绘制字符串,需要制定文本、位置、字体、颜色等参数。

6. MeasureString():测量指定字符串在指定字体下的大小,并返回一个SizeF对象。

7. Save():保存当前绘图面的状态。

8. Restore():恢复绘图面的状态。

只有当开发者将绘制文本操作封装成方法,才能在以后使用时起到更好的效果。

## 4.案例说明

下面我们通过一个实例来展示如何利用MeasureString、Graphics获取字符串的像素:

如图所示,我们需要讲字符串“MeasureString"填写在TextBox中,并且实时根据填写文本长度变化调整Lable的宽度。

实现思路:

1、实现填写文本并动态监听文本改变。

2、创建Graphics对象,设置字体和文本显示区域,并根据字符串的宽度更新Lable的宽度。

3、使用在步骤2中得到的Lable宽度更新Lable的位置。

代码实现如下:

```csharp

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

// 设置文本框的最大长度

textBox1.MaxLength = 32;

// 对文本框的TextChanged事件进行响应

textBox1.TextChanged += (sender, e) =>

{

Graphics g = CreateGraphics();

SizeF text_size = g.MeasureString(textBox1.Text, textBox1.Font);

int width = (int)text_size.Width;

label1.Width = width;

label1.Location = new Point(textBox1.Right - label1.Width, label1.Location.Y);

g.Dispose();

};

}

}

```

上述代码中,我们首先给文本框设置了最大长度,并对文本框的TextChanged事件进行响应,当文本框中的文本内容发生改变时,我们就利用Graphics对象求出文本的长度,并更新label的宽度和位置。

总结

本篇文章中,我们介绍了字符码、点阵码之间的转换关系,以及C#中常用的MeasureString、Graphics方法,同时配合案例展示了如何通过这些方法获取字符串的像素。可以通过本文学习到C#中字符串的宽高计算方法和Graphics绘图方法,为大家今后的编程工作提供基础的参考。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(62) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部