当前位置:   article > 正文

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

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图片)的例子,有些跟帖的说不详细,如果有时间我再整理吧,如果真的能用的上,自己看一下应该能懂。稍微有点复杂,呵呵。重新把链接贴出来,有需要的看一下吧,欢迎沟通。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/582784
推荐阅读
相关标签
  

闽ICP备14008679号