手动控制绘制有奇怪的字体

时间:2013-03-12 04:17:55

标签: c# winforms bitmap controls

长话短说,我正在以类似于以下的方式在位图中绘制一个控件(例如:A按钮):

using (Bitmap controlBitmap = new Bitmap(control.Width, control.Height))
{
    using (Graphics controlGraphic = Graphics.FromImage(controlBitmap))
    {
        PaintEventArgs args = new PaintEventArgs(controlGraphic, control.ClientRectangle);

        MethodInfo info = control.GetType().GetMethod("OnPaintBackground", BindingFlags.Instance | BindingFlags.NonPublic);
        info.Invoke(control, new object[] { args });
        info = control.GetType().GetMethod("OnPaint", BindingFlags.Instance | BindingFlags.NonPublic);
        info.Invoke(control, new object[] { args });

        graphic.DrawImage(controlBitmap, control.Left, control.Top);
    }
}

虽然所有控件都是正确绘制的,但唯一不是文本。

Fat or corrupted text?

我有点达到了控制行为的知识极限。我不知道为什么文本是唯一没有正确绘制的部分。

我缺少什么才能使字体正确显示?

1 个答案:

答案 0 :(得分:3)

嗯,文字没有正确消除锯齿,从黑色混合到黑色。好像背景是透明的。不知道为什么。只是不要这样做,利用Control.DrawToBitmap():

    using (Bitmap controlBitmap = new Bitmap(control.Width, control.Height)) 
    using (Graphics controlGraphic = Graphics.FromImage(controlBitmap)) {
        control.DrawToBitmap(controlBitmap, control.DisplayRectangle);
        graphic.DrawImage(controlBitmap, control.Left, control.Top);
    }