使用WPF创建带有文本的图像并将其保存为C#中的.png

时间:2016-07-27 08:03:48

标签: c# wpf

我们正在研究光学字符识别系统,我想比较不同渲染器渲染文本的方式。我想创建一个简单的程序,创建一个图像,用不同的字体,大小和样式写一些文本,并将其保存到.png文件(我希望在一个文件中我需要所有大小,字体样式,所以他们是容易比较)。我已经设法使用Bitmap使用GDI和GDI +渲染器。 现在我正在尝试在WPF应用程序中执行相同的操作,因为我听说渲染文本有所不同。是否可以使用BitmapImage?来自Windows Forms我认为这个问题应该很简单,但我似乎无法在WPF中这样做。

这是我使用GDI + Renderer完成它的简化版本:

public void CreateAndSave()
{
    Bitmap bitmap = new Bitmap(500, 500, PixelFormat.Format24bppRgb);
    Graphics g = Graphics.FromImage(bitmap);
    g.Clear(Color.White);
    g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
    g.DrawString("sample text", font, brush, x, y);
    bitmap.Save(fileName);
}

使用WPF有没有类似的方法?

2 个答案:

答案 0 :(得分:1)

诸如“DrawString”之类的方法在WPF中是昂贵的。您可以创建画布/网格并放置文本框或标签等,而不是这样做,然后您可以渲染该画布/网格。您可以使用该代码:

public void ConvertToBitmapSource(UIElement element)
{
    var target = new RenderTargetBitmap(
        (int)element.RenderSize.Width, (int)element.RenderSize.Height,
        96, 96, PixelFormats.Pbgra32);
    target.Render(element);

    var encoder = new PngBitmapEncoder();
    var outputFrame = BitmapFrame.Create(target);
    encoder.Frames.Add(outputFrame);

    using (var file = File.OpenWrite("TestImage.png"))
    {
        encoder.Save(file);
    }
}

答案 1 :(得分:0)

使用FormattedText类构建Geometry对象,请从此处获取示例: https://msdn.microsoft.com/en-us/library/system.windows.media.formattedtext.buildgeometry(v=vs.110).aspx

然后,使用其中一个BitmapEncoder类来保存您构建的Geometry对象。看看那个例子: https://stackoverflow.com/a/9081295/3730455

相关问题