0
我需要允许用户通过位图绘制线条。线路应交互绘制,我的意思是使用典型的代码给用户关于什么是绘制的视觉反馈的东西进行:在位图上交互绘制线条
private void MainPictureBox_MouseDown(object sender, MouseEventArgs e)
{
DrawingInProgress = true ;
Origin = new Point (e.X, e.Y);
}
private void MainPictureBox_MouseUp(object sender, MouseEventArgs e)
{
DrawingInProgress = false ;
}
private void MainPictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (!DrawingInProgress) return ;
End = new Point (e.X, e.Y);
using(Pen OverlayPen = new Pen(Color .Red, 1.0f))
using (Graphics g = MainPictureBox.CreateGraphics())
{
g.DrawLine(OverlayPen, Origin, End);
}
}
当然我跟踪内MainPictureBox_MouseUp使用List.Add点,以画在Paint事件线(代码未显示为简单起见)
没有背景图像的事情可以做很好的直接覆盖与背景色的前行,喜欢的东西:
g.DrawLine(BackgroundColorPen, Origin, PreviousEnd);
g.DrawLine(OverlayPen, Origin, End);
但这不是一个不统一的背景。
无效由点定义的矩形:起源,PreviousEnd然后使用Update()使得呈现相当混乱。我想知道如何执行此任务,这些都是可能的方法,我正在考虑:
- 在透明位图上画线,然后在位图框上绘制位图。我认为,对于大型图像来说,由于表演的原因,这是不可行的。
- 使用Picture.BackgroundImage的位图,然后绘制Picture.Image,但我无法弄清楚这是如何真的可以在当天保存
- 使用双缓冲?怎么样?
- 在pictureBox上叠加一个不同的控件(面板?),使其透明(可能吗?),然后绘制它。
可能有人给的最好的方向提示吗?我真的迷了路。
我强烈建议WPF为此。 winforms是一种非常老的技术,没有人在意,而且由于缺乏硬件加速,它不支持丰富,快速的交互式用户界面。由于其基于DirectX的硬件加速底层引擎,WPF可以更好地处理基于图形的用户界面。 –
感谢您的提示,但我正在编辑现有的程序,所以我无法更改我正在使用的技术。 – Daniel
对于“交互式”行使用[ControlPaint.DrawReversibleLine()](http://msdn.microsoft.com/en-us/library/system.windows.forms.controlpaint.drawreversibleline(v = vs.110).aspx) 。如果你画同一条线两次,它会恢复原来的那个。堆叠控制在大多数情况下不起作用。对不起,“透明度”在WinForms中是一个误用。 –