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中是一個誤用。 –