使用WPF将文本呈现为位图时出现问题

使用WPF将文本呈现为位图时出现问题,wpf,fonts,bitmapimage,Wpf,Fonts,Bitmapimage,我正在开发一个使用WPF动态呈现内容的应用程序,包括从WPF到jpg文件的文本和图像。我目前正在使用RenderTargetBitmap类来完成这项工作。一切正常,但渲染字体的质量很差。我知道RenderTargetBitmap不使用ClearType,而是使用灰度反别名,这对于小字体来说有点模糊。但我使用的是大字体,大于30分,结果是完全不能接受的。这个问题有什么解决办法吗 [更新] 下面列出了我正在使用的代码。正如预期的那样,它会在CompositionTarget的每个渲染事件上调用 vo

我正在开发一个使用WPF动态呈现内容的应用程序,包括从WPF到jpg文件的文本和图像。我目前正在使用RenderTargetBitmap类来完成这项工作。一切正常,但渲染字体的质量很差。我知道RenderTargetBitmap不使用ClearType,而是使用灰度反别名,这对于小字体来说有点模糊。但我使用的是大字体,大于30分,结果是完全不能接受的。这个问题有什么解决办法吗

[更新]

下面列出了我正在使用的代码。正如预期的那样,它会在CompositionTarget的每个渲染事件上调用

void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            prefix = "";
            if (counter < 10)
            {
                prefix = "000";
            }
            else if (counter < 100)
            {
                prefix = "00";
            }
            else if (counter < 1000)
            {
                prefix = "0";
            }

            Size size = new Size(MainCanvas.Width, MainCanvas.Height);
            MainCanvas.Measure(size);
            MainCanvas.Arrange(new Rect(size));


            RenderTargetBitmap bmp = new RenderTargetBitmap(imgWidth, imgHeight, 96d, 96d, PixelFormats.Default);
            bmp.Render(MainCanvas);

            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.QualityLevel = 90;
            encoder.Frames.Add(BitmapFrame.Create(bmp));
            string file = basePath + prefix + counter.ToString() + "_testpic.jpg";
            using (Stream stm = File.Create(file))
            {
                encoder.Save(stm);
            }
            counter++;
        }
以下是生成图像的一些示例:

提前感谢。

试试这个:

int height = (int)border.ActualHeight;
int width = (int)border.ActualWidth;
RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(border);

边框是您试图保存为位图的内容。

好的,我终于找到了解决方案。古斯塔沃,你走对了方向。问题是我试图渲染为位图的主容器被其父容器扭曲了。解决方案是将主容器添加到画布,画布没有扭曲其子容器的布局引擎。我还需要做更多的实验,但看起来很有希望。显然RenderTargetBitmap根本不喜欢扭曲的字体。

位图的分辨率是多少?请发布使用RenderTargetBitmap的代码。你使用什么样的像素格式?我在上面添加了代码和示例图像,谢谢你的提示。实际高度和实际宽度有意义。不幸的是,在这种情况下,这并没有带来什么不同。