Wpf 在屏幕外绘图时是否可以获取TextFormattingMode=显示(例如RenderTargetBitmap)?

Wpf 在屏幕外绘图时是否可以获取TextFormattingMode=显示(例如RenderTargetBitmap)?,wpf,text-rendering,Wpf,Text Rendering,我在WPF中绘制某些图像,这些图像将由游戏(由第三方开发)显示。我目前使用RenderTargetBitmap生成图像。不幸的是,这似乎只支持理想的文本格式模式,导致小字体模糊。该应用程序是第三方游戏,因此无法使用图像 我是否可以让RenderTargetBitmap假定它正在绘制一个目标为当前月份之一的图像?是否有其他方法让WPF使用显示渲染模式进行屏幕外绘图 我理解为什么这在理论上似乎是错误的,但在实践中,我认为这样做并非不合理: 显示模式允许的一个功能是锯齿文本,它在小尺寸时比理想的渲染

我在WPF中绘制某些图像,这些图像将由游戏(由第三方开发)显示。我目前使用
RenderTargetBitmap
生成图像。不幸的是,这似乎只支持
理想的
文本格式模式,导致小字体模糊。该应用程序是第三方游戏,因此无法使用图像

我是否可以让
RenderTargetBitmap
假定它正在绘制一个目标为当前月份之一的图像?是否有其他方法让WPF使用
显示
渲染模式进行屏幕外绘图

我理解为什么这在理论上似乎是错误的,但在实践中,我认为这样做并非不合理:

  • 显示
    模式允许的一个功能是锯齿文本,它在小尺寸时比
    理想的
    渲染效果更好,并且完全独立于监视器属性(如gamma)
  • 以ClearType呈现的小型
    显示
    -模式文本的屏幕截图在任何屏幕上看起来都比
    理想
    -模式文本好得多,即使是具有不同gamma的屏幕

WPF渲染引擎可以做到这一点,还是我必须回到GDI上来?(在屏幕外使用别名或ClearType渲染没有困难)

当然没有明显的方法可以做到这一点。我猜画图像从来不是WPF的目标;事实上,它在大多数情况下都能很好地做到这一点,这肯定是偶然的。

现在看来,这是可行的。其他人能证实吗?以下是相关代码:

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);
编辑:忘了提到我使用的是.NET4.5框架


Edit2:Display和Ideal之间的差异在较小的字体尺寸下尤其明显。

您有完整的生成png的示例吗?如果是这样的话,你能把它发布在pastebin.com或类似网站上吗?是的,试试这个。我替换了粘贴中的一些变量,因此代码未经测试。我已经尝试过了。我认为它的效果与
textformatingmode.Display
在实际屏幕上的效果不同:具体来说,没有ClearType(没有亚像素消除混叠)。考虑到最新的发展(MS Office 2013和Windows 8中的模糊非ClearType渲染),我想这并不太令人惊讶……是的,我同意,能够设置渲染模式会很好!由于这个原因,以及其他一些原因,我将采用Freetype的方式在屏幕外渲染文本。Freetype只是包含了Adobe的暗示算法,它看起来很好,并且符合我的需要。