日期:2014-05-18  浏览次数:20959 次

难道就无解了吗?如何构造特定宽度的字体?
.net中的字体好像都是高宽相等的,Font构造函数自接收“全身大小”参数
如果我想控制字体的宽度,使得字体看起来变瘦或变胖的话应该怎么做呢?
调用GDI的CreateFont函数也不行,实在没有办法了,特来求救!!!

------解决方案--------------------
绘制成图,然后缩放——字体本身就是一个点阵,不同大小的字体,在字库中都是固定的,你当然更改不了比例了。

==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
优惠接单开发,组件控件定制开发,成品源代码批发
联系方式:Q64180940 全天在线
==================================================================
------解决方案--------------------
字体不能想你这么改的,不然各种各样的字体也就没意义了。
------解决方案--------------------
点阵字库多年前就已过时...Windows系统只保留了很少一部份点阵字体用于兼容(事实上已经没人用了)...

目前Windows系统使用的绝大多数字体都是矢量字体,字库中只存储描绘字体的贝塞尔曲线参数,也就是说它们是在显示和打印时才经过数学运算渲染出来的...因此它们的大小可以任意缩放而不变形,不过是等比例的...

不等比例的缩放方法GDI+好像没有提供...毕竟矢量字体的运算渲染是系统级的,而且相当的复杂...

一个简单的方法是...把文字作为属性存起来,输出时转换为图片再处理,编辑后重新生成图片重新处理...
------解决方案--------------------
如下一个变宽的例子:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
Font font = new System.Drawing.Font( "宋体 ", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
g.ScaleTransform(1.5f, 1.0f);
g.DrawString( "变形字 ", font, new SolidBrush(Color.Red), new Point(0, 0));
}