赞
踩
可能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图片)的例子,有些跟帖的说不详细,如果有时间我再整理吧,如果真的能用的上,自己看一下应该能懂。稍微有点复杂,呵呵。重新把链接贴出来,有需要的看一下吧,欢迎沟通。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。