我正在尝试使用从VCL C ++应用程序移植的自定义控件解决问题。这个想法是控件的各个部分首先在一个新的Graphics对象上绘制,然后与控件的paint方法中的Graphics对象合并。
我创建了一个简化的例子:
using System.Drawing;
using System.Windows.Forms;
namespace Test
{
public class Form1 : Form
{
private PictureBox pictureBox;
public Form1()
{
pictureBox = new PictureBox();
pictureBox.Dock = DockStyle.Fill;
pictureBox.Paint += new PaintEventHandler(pictureBox_Paint);
ClientSize = new Size(100, 50);
Controls.Add(pictureBox);
}
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
SolidBrush blackBrush = new SolidBrush(Color.Black);
Bitmap bitmap = new Bitmap(pictureBox.Width, pictureBox.Height);
Graphics graphics = Graphics.FromImage(bitmap);
Font font = new Font(pictureBox.Font, FontStyle.Regular);
graphics.DrawString("simple test", font, Brushes.Black, 0, 0);
e.Graphics.DrawImage(bitmap, 0, 0);
}
}
}
运行上面的代码会导致文本被绘得太厚:
当我修改代码以直接将文本绘制到PictureBox的Graphics对象时,我得到了正确的结果:
仅在文本呈现时才会出现此问题。线条和其他形状正确呈现。任何想法如何解决这个问题?
提前致谢。