我需要在屏幕上的800x800像素的正方形中的100個半隨機點之間繪製100條線。需要在屏幕上高效地繪製到800 * 800像素的框
我一直在使用內置的繪圖線& .NET中的drawrecangles函數,但每次繪製表單時我的繪圖都會被擦除。
所以,我一直在考慮繪製到內存中的位圖,但我不確定這是否是一個好的解決方案。
任何提示?
我需要在屏幕上的800x800像素的正方形中的100個半隨機點之間繪製100條線。需要在屏幕上高效地繪製到800 * 800像素的框
我一直在使用內置的繪圖線& .NET中的drawrecangles函數,但每次繪製表單時我的繪圖都會被擦除。
所以,我一直在考慮繪製到內存中的位圖,但我不確定這是否是一個好的解決方案。
任何提示?
這不僅是一個好主意,還有一個名稱(雙緩衝)。在窗體的Bitmap中繪製圖形,然後在窗體的Paint事件中繪製(實際上,最好使用窗體上的PictureBox進行繪製,並使用它的Paint事件),使用Graphics對象的DrawImage方法繪製位圖放入PictureBox。
一個更簡單的方法是創建您的位圖,繪製它,然後將位圖設置爲您的PictureBox的圖像屬性。即使您的表單被重新繪製,這也會自動保留圖像。
這是一個好主意。您將繪製到位圖並在您的窗體中繪製位圖。在修改位圖之後調用重繪(或等效)。
這不是一個好主意,假設我的機器的GDI +性能可比。 Form類已經通過DoubleBuffered屬性支持雙緩衝。它比你能做得更好,假設你不喜歡P/Invoke。
我的測量:
這當然會c當您繪製400多條線時會發生絞線。爲了獲得WF的雙緩衝給你的性能,你必須使用BufferedGraphics類。這是非常不友善的。
您可以在位圖上繪製以使其具有持久性,或者您可以使用繪畫事件在窗體上繪製它。
要繪製上的位圖(圖片框Picture1中,在本示例):用鹼類
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Me.Paint
e.Graphics.DrawRectangle(...)
end sub
雖然BufferedGraphics可以是不友好的,this guy explains it well:
dim g as graphics
g = Graphics.FromImage(Picture1.Image)
g.DrawRectangle(...)
要使用油漆事件你可以使用你自己的控制。