以下是msdn的說明:
雙緩衝使用記憶體緩衝區來解決由多重繪製操作造成的閃爍問題。
當啟用雙緩衝時,所有繪製操作首先呈現到記憶體緩衝區,而不是螢幕上的繪圖圖面。
所有繪製操作完成後,記憶體緩衝區直接複製到與其關聯的繪圖圖面。
因為只在螢幕上執行一項圖形操作,所以消除了與複雜繪圖操作關聯的圖形閃爍。對於大多數應用程式而言,由 .net framework 提供的預設雙緩衝將提供最佳結果。
預設情況下,標準 windows 窗體控制項是雙緩衝的。
可以通過兩種方法對窗體和所創作的控制項啟用預設雙緩衝。
一種方法是將 doublebuffered 屬性設定為 true,另一種方法是通過呼叫 setstyle 方法將 optimizeddoublebuffer 標誌設定為 true。
兩種方法都將為窗體或控制項啟用預設雙緩衝並提供無閃爍的圖形呈現。
建議僅對已為其編寫所有呈現**的自定義控制項呼叫 setstyle 方法。
使用窗體的雙緩衝只需要將doublebuffered 的屬性設定為true就可以了。
下面的**是乙個畫線的應用,在窗體上使用雙緩衝,窗體上畫線,不會出現閃爍,而容器內出現閃爍。
namespace line
private void form1_mousedown(object sender, mouseeventargs e)
}private void form1_mouseup(object sender, mouseeventargs e)
}private void form1_paint(object sender, painteventargs e)
e.graphics.drawline(pen, systempointitem.pointstart.x, systempointitem.pointstart.y, systempointitem.pointend.x, systempointitem.pointend.y);
}private void form1_load(object sender, eventargs e)
private void form1_mousemove(object sender, mouseeventargs e)
}private void button1_click(object sender, eventargs e)
private void panel1_mousedown(object sender, mouseeventargs e)
}private void panel1_mousemove(object sender, mouseeventargs e)
}private void panel1_mouseup(object sender, mouseeventargs e)
}private void panel1_paint(object sender, painteventargs e)
e.graphics.drawline(pen, systempointitem.pointstart.x, systempointitem.pointstart.y, systempointitem.pointend.x, systempointitem.pointend.y);}}
}
雙緩衝機制
最早解釋多緩衝區如何工作的方式,是通過乙個現實生活中的例項來解釋的。在乙個陽光明媚的日子,你想將水池裡的水換掉,而又找不到水管的時候,你就只能用木桶來灌滿水池。當木桶被水龍頭注滿的,關掉水龍頭,走到水池旁邊,將水到進去,然後走回到水龍頭旁邊繼續重複上述工作,如此往復直到將水池灌滿。這就類似單緩衝工作...
Swing雙緩衝機制
public void paint graphics g 畫出草地 paintgrass gimage 畫出小河 paintriver gimage 畫出石頭 paintstone gimage 畫出各種道具 painttool gimage 將接下來的載入到窗體畫布上去,才能考到每次畫的效果 g....
Java 雙緩衝機制
圖形的移動的時候不時會出現閃爍的現象,這是由於在同乙個繪圖表面上對圖形進行反覆繪製並擦除所導致的。舉例來說,乙個繪製的小球,圖形的繪製總是在panle元件的graphics物件上進行的,在繪製一幅小球的圖形後馬上更新小球座標,接著呼叫repaint 方法擦除已有圖形並繪製一幅新的圖形。這一過程反覆地...