使用别名格式将文本绘制到RenderBitmapSource

时间:2019-04-08 08:48:00

标签: c# wpf

我想在RenderTargetBitmap上绘制文本。

此代码可在WinForms中使用:

e.Graphics.TextRenderingHint =
        TextRenderingHint.SingleBitPerPixelGridFit;
    e.Graphics.DrawString("Without Smoothing",
        the_font, Brushes.Blue, x, y);
    y += 25;

enter image description here

TextRenderingHint的WPF替代方法是什么?

现在我用以下代码绘制:

public BitmapSource KarakterMintakRajzolasa(int CelMagassag)
    {
        Typeface typeface = new Typeface("Times New Roman");
        FormattedText formatted_text = null;

        for (double betuMeret = 8; betuMeret < 24; betuMeret += 0.1)
        {
            // betűtípus és formázott szöveg létrehozás
            formatted_text = new FormattedText(KarakterLista, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeface, betuMeret, Brushes.Black);
            formatted_text.TextAlignment = TextAlignment.Center;

            if (formatted_text.Height == CelMagassag)
                break;
        }

        // szélesség magasság számolása
        double width = formatted_text.Width - formatted_text.OverhangLeading;
        double height = formatted_text.Height;

        // DrawingVisual létrehozása és rárajzolás
        DrawingVisual drawing_visual = new DrawingVisual();
        DrawingContext drawing_context = drawing_visual.RenderOpen();
        drawing_context.DrawRectangle(Brushes.White, null, new Rect(0, 0, width, height)); //fehér háttér
        drawing_context.DrawText(formatted_text, new Point(width / 2, 0));
        drawing_context.Close();

        // az eredmény bitmap-ra rajzolása
        RenderTargetBitmap bm = new RenderTargetBitmap((int)width, (int)height, 96, 96, PixelFormats.Pbgra32);
        bm.Render(drawing_visual);
        bm.Freeze();

        return bm;
    }

我的代码产生了错误的结果: enter image description here

0 个答案:

没有答案