使用FormattedText创建位图

时间:2012-01-05 23:14:36

标签: c# winforms bitmap

在C#表单项目中,我可以编写以下代码来获得我想要的东西,但似乎有两个不同的“世界”我试图融合。

FormattedText text = new FormattedText(textBox1.Text, CultureInfo.GetCultureInfo("en-us"), System.Windows.FlowDirection.LeftToRight, new Typeface("Tahoma"), 20, System.Windows.Media.Brushes.Black);
text.MaxTextWidth = 480;
text.MaxTextHeight = 480;
DrawingVisual d = new DrawingVisual();
DrawingContext d1 = d.RenderOpen();
d1.DrawText(text, new System.Windows.Point(0, 0));
d1.Close();
RenderTargetBitmap bmp = new RenderTargetBitmap(480, 480, 120, 96, PixelFormats.Pbgra32);
bmp.Render(d);
System.Windows.Controls.Image I=new System.Windows.Controls.Image();
I.Source = bmp;

给我一​​个Windows.Media.ImageSource。我想迁移整个事物以使用System.Drawing命名空间。

由于我基本上必须导入WPF库以使上述代码工作,而我想要做的是如此基本,我怎样才能在Windows窗体中执行,最好是以非繁琐的方式。

注意:我真正想做的就是以允许换行的方式在位图上绘制文本,然后将其作为位图进行操作。如果有一种更简单的方法(在Windows窗体中)可以正常工作,如果不是更好。

1 个答案:

答案 0 :(得分:3)

是的,那是WPF代码,一个完全不同的世界。 System.Drawing版本应该类似于:

var bmp = new Bitmap(480, 480);
using (var gr = Graphics.FromImage(bmp)) {
    gr.Clear(Color.White);
    TextRenderer.DrawText(gr, textBox1.Text, this.Font, 
        new Rectangle(0, 0, bmp.Width, bmp.Height), 
        Color.Black, Color.White,
        TextFormatFlags.WordBreak | TextFormatFlags.Left);
}
if (pictureBox1.Image != null) pictureBox1.Image.Dispose();
pictureBox1.Image = bmp;

我猜到了表格上的一个图片框。