C# 在DrawingContext中以一定角度绘制文本?

C# 在DrawingContext中以一定角度绘制文本?,c#,wpf,drawingcontext,drawingvisual,C#,Wpf,Drawingcontext,Drawingvisual,因此,我使用以下代码获取现有图像、输入表单中的文本,然后将输入表单中的文本放置到现有图像上,并将其另存为新图像: using (FileStream output = new FileStream(match_outputFile, FileMode.Create)) { BitmapImage bitmap = new BitmapImage(new Uri(match_sourceFile, UriKind.Relative)); DrawingVisual visual =

因此,我使用以下代码获取现有图像、输入表单中的文本,然后将输入表单中的文本放置到现有图像上,并将其另存为新图像:

using (FileStream output = new FileStream(match_outputFile, FileMode.Create))
{
    BitmapImage bitmap = new BitmapImage(new Uri(match_sourceFile, UriKind.Relative));
    DrawingVisual visual = new DrawingVisual();

    using (DrawingContext image = visual.RenderOpen())
    {
        image.DrawImage(bitmap, new Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight));

        buildText(image, "text1", this.text1.Text);
        buildText(image, "text2", this.text2.Text);
        buildText(image, "text3", this.text3.Text);
    }

    RenderTargetBitmap target = new RenderTargetBitmap(bitmap.PixelWidth, bitmap.PixelHeight, bitmap.DpiX, bitmap.DpiY, PixelFormats.Default);
    target.Render(visual);

    BitmapEncoder encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(target));
    encoder.Save(output);
}
如您所见,它调用以下函数来绘制文本:

private void buildText(DrawingContext image, string settings, string input)
{
    string[] setting = (Properties.Settings.Default[settings].ToString()).Split(',');

    FormattedText text = new FormattedText(
        input,
        System.Globalization.CultureInfo.InvariantCulture,
        FlowDirection.LeftToRight,
        new Typeface(new FontFamily(setting[0]), FontStyles.Normal, FontWeights.Bold, FontStretches.Normal),
        Convert.ToDouble(setting[5]),
        (Brush) new BrushConverter().ConvertFromString(setting[4])
    );
    text.MaxTextWidth = Convert.ToDouble(setting[8]);
    text.MaxTextHeight = Convert.ToDouble(setting[9]);

    Point position = new Point(Convert.ToDouble(setting[7]), Convert.ToDouble(setting[6]));

    switch (setting[2])
    {
        case "center": position.X += (Convert.ToDouble(setting[8]) - text.Width) / 2; break;
        case "right": position.X += Convert.ToDouble(setting[8]) - text.Width; break;
    }

    switch (setting[3])
    {
        case "middle": position.Y += (Convert.ToDouble(setting[9]) - text.Height) / 2; break;
        case "bottom": position.Y += Convert.ToDouble(setting[9]) - text.Height; break;
    }

    image.DrawText(text, position);
}
现在我需要的是简单的。。。我需要从中心位置以一定角度绘制text2(仅text2)。中心位置很简单,应该是:

centerX = (setting[8] - setting[7]) / 2;
centerY = (setting[9] - setting[6]) / 2;
如果我想画这个文本,在中心位置旋转-30度角怎么办?请记住,我只需要旋转文本2,而不是其他文本,也不是原始图像源。

在绘制文本之前,只需在绘图上下文中添加一个。绘制后,将执行变换

buildText(image, "text1", this.text1.Text);
image.PushTransform(new RotateTransform(angle, centerX, centerY));
buildText(image, "text2", this.text2.Text);
image.Pop();
buildText(image, "text3", this.text3.Text);