2012-01-31 42 views
1

我正在绘制WPF中的某些图像,这些图像将由游戏(由第三方开发)显示。我目前使用RenderTargetBitmap生成图像。不幸的是,它似乎只支持Ideal文本格式模式,导致模糊的小字体。该应用程序是第三方游戏,因此无法使用图像。我能否获得TextFormattingMode =在屏幕外绘制时显示(例如RenderTargetBitmap)?

我可以告诉RenderTargetBitmap假设它正在绘制一张指定给当前监视器之一的图像吗?是否有另一种方式让WPF使用Display渲染模式进行离屏绘制?

我明白为什么这个看似错误的理论意义,但在实践中也有,为什么我觉得这是不这样做不合理的事情的原因:

  • 的事情之一了Display模式允许的别名文字,这种文字在尺寸上比Ideal渲染更小,并且完全独立于诸如伽玛等监视器属性。
  • 小型Display的屏幕截图 - 在ClearType中呈现的模式文本在任何屏幕上看起来要好得多,即使是具有不同gamma值的屏幕,也不会使用Ideal模式文本。

WPF渲染引擎可以做到这一点,还是我必须回落到GDI? (在使用Aliased或ClearType渲染离屏时没有困难)

回答

0

确实没有明显的这样做。我想绘制图像从来不是WPF的目标;事实上,大多数情况下它可以做得相当好,但这一事实必定是偶然的。

0

看来现在这个工作。其他人可以验证吗?下面是相关的代码:

var textBlock = new TextBlock(); 
textBlock.Text = "Hello World"; 
textBlock.FontFamily = new System.Windows.Media.FontFamily("Arial"); 
textBlock.Background = System.Windows.Media.Brushes.Transparent; 
textBlock.Foreground = System.Windows.Media.Brushes.Black; 
textBlock.FontSize = 50; 

// . Set Formatting Mode Works! Setting the rendering mode doesn't. 
System.Windows.Media.TextOptions.SetTextFormattingMode(textBlock, System.Windows.Media.TextFormattingMode.Display); 

编辑:忘了提我使用的.NET 4.5框架

EDIT2:显示和理想之间的区别是在较小的字体尤其明显。

+0

你有一个完整的例子,它会产生一个PNG吗?如果是这样,请把它发布到pastebin.com或类似的地方吗? – 2013-09-19 18:08:53

+0

是的,试试这个http://pastebin.com/8N2pbAHU。我替换了粘贴中的一些变量,所以代码未经测试。 – 2013-09-23 15:28:12

+0

我试过了。我不认为它与'TextFormattingMode.Display'在实际屏幕上具有相同的效果:具体来说,没有ClearType(没有子像素消除锯齿)。鉴于最新的发展(在MS Office 2013和Windows 8中模糊的非ClearTyped渲染),这不是太令人惊讶,我猜... – 2013-10-04 14:35:17