我有一個下載的圖像應用程序在手機上。每次圖像下載成功時,它都會自動繪製到臨時位圖,然後onPaint方法繪製整個臨時位圖。它導致了很多事情發生。用GDI函數繪製圖像
我的老師建議我每次加載一個圖像時使用GDI函數在屏幕上繪製臨時位圖。但他的建議對於這兩種方法是如此普遍。
[DllImport("coredll.dll")]
static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("coredll.dll")]
static extern void ReleaseDC(IntPtr dc);
因此,在這種情況下,他提出了什麼更明確的建議嗎?提前致謝。
UPDATE
//This is my buffer bitmap
private Graphics offGraph;
private Bitmap offBitmap;
//everytime an image is loaded, it raise an event and then I draw it on buffer.
private void ImageLoadDone(object sender, EventArgs e)
{
ImageObj LoadedImg = (ImageObj)sender;
LoadedImg.Render(offGraph);
this.BeginInvoke(new EventHandler(ImageUpdate));
}
private void ImageUpdate(object sender, EventArgs myE)
{
this.Render();
}
//and then onPaint draw the offbitmap.
private void Render()
{
CtrlGraph.DrawImage(offBitmap,0,0);
}
確保您銷燬IDisposable對象。特別是位圖。 http://blog.opennetcf.com/ctacke/PermaLink,guid,987041fc-2e13-4bab-930a-f79021225b74.aspx – Bryan 2010-01-27 22:01:19
我剛剛更新了我的代碼。這非常有幫助。順便說一句,是this.CreateGraphics()最好的選擇,當我們要避免閃爍,忽略onPaint方法? – Thyphuong 2010-01-28 01:47:36
Thyphuong - 是的,忽略onPaint並在每次需要更新屏幕時調用Render()...您需要調用onPaint的唯一時間是當您a)初始繪製屏幕時b)如果窗口已調整大小c)if另一種形式出現在它上面 例如,它可能會在onResize或onActivated事件上調用 – 2010-02-05 15:50:53