0

簡単に言うと、次のような方法でビットマップにコントロール (例: ボタン) を描画しています。

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);
    }
}

すべてのコントロールが正しく描画されていますが、正しく描画されていないのはテキストだけです。

太いテキストまたは破損したテキスト?

コントロールの動作に関する知識の限界に達しました。正しく描画されていない部分がテキストだけである理由がわかりません。

フォントを正しく表示するには何が欠けていますか?

4

1 に答える 1

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);
    }
于 2013-03-12T04:43:50.540 に答える