wpf 字体模糊_WPF:解决WPF文字显示不清晰初探

可能WPF太耀眼了,大家都一直在讨论它的光芒,我也是其中的一员。

当发现它给软件界面设计带来的革命性变化时,说服同事,在新项目中使用了WPF这一新技术。

无奈,项目快结束时,头头验收时说字体模糊,不能接受,只好认真对待了。

没有彻底解决,但是在很多情况下可以使用,可以解燃眉之急。

症状:比较WPF项目和WinForm下字体显示效果,WPF下文字很模糊。特别是“宋体”,简直一团糟,换了别的字体稍微好一点,但是还是无法接受,被大家推崇为最佳解决方案的“微软雅黑”也无济于事(有可能是我机器的原因)。

问题分析:字体较WinForm下模糊,是因为WPF下和WinForm使用的绘制文字引擎不一样,感觉有点矢量文字的意思,进行了模糊处理,特别是文字较小时,表现很糟糕。

解决办法:使用WinFowm下Graphics进行绘制文字到Bitmap上,然后把Bitmap转换成WPF下面的ImageSource,然后再采用DrawingContext。DrawImage(。。。)方法进行绘制图片即可。

核心代码如下:

protected override void OnRender(DrawingContext drawingContext)

{

//base.OnRender(drawingContext);

try

{

System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(txtSize.Width, txtSize.Height);

System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);

graphics.DrawString(Text, txtFont, TransBrush(this.Foreground), new System.Drawing.PointF(0,0));

ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(

bitmap.GetHbitmap(),

IntPtr.Zero,

System.Windows.Int32Rect.Empty,

BitmapSizeOptions.FromEmptyOptions());

drawingContext.DrawImage(imageSource, new Rect(0, 0, bitmap.Width, bitmap.Height));

}

catch { }

}

源代码如下:

源码里面有缺陷:最让我头疼的是外围容器的宽度会影响字体的清晰度,具体就是差一个像素。比如例子中Window的宽度设为300,就不清晰,有重影,如果设为301,就好了,跟WinForm是一样的。原因没有找到,猜想是WPF和WinForm之间像素坐标系统有差别有关,具体由于工作忙,就没有细究,凑合着使用了。如果有解决方案,望大家共享,呵呵,还是那样,祝大家好运,在编程中享受乐趣。

上午发了一个关于WPF中显示动画图片(如。gif图片)的例子,有些跟帖的说不详细,如果有时间我再整理吧,如果真的能用的上,自己看一下应该能懂。稍微有点复杂,呵呵。重新把链接贴出来,有需要的看一下吧,欢迎沟通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值