發信人peiga.bbs@ptt.cc (做自己),
看板C_Sharp
標 題Re: [問題] 透明底圖的效能如何改善?
發信站批踢踢實業 (Tue Jun 23 07:37:51 2009)
轉信站ptt2!news.ntu!ptt
謝蒙先進一直寫出好文章,讓我們這些後輩所獲良多
目前小弟也有部份程式會用到透明圖,在參考這篇文章後有些問題
我將問題直接穿插在原文中,請指導一下,謝謝
: 高效能的原理就是"千萬""千萬"不要呼叫任何refresh(), update()...
: 底層是你的UI的snapshot,也就是全部壓成一張圖(多線程分段載入效果好!).
請問一下所謂的底層可以是指Form或UserControl的BackgroundImage嗎?
另外這裡所指的多線程"分段載入"是類似下面的作法?
Form_Load(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(loadBackgroundImage));
}
void loadBackgroundImage(object stateInfo)
{
//load Image
}
: 上面疊一層Layer, 完全透明(設transparent key)
這裡的Layer我選用PictureBox,並將Dock設定為Full,BackColor設為任意一個顏色
然後將Form的TransparentKey設為該PictureBox的BackColor
這樣我發覺執行後整張表單都變成透明的了
: 用來收使用者的事件e.g., click,keypress...
: 再去做對應的回饋效果e.g.,按下去有光暈效果.
: 回饋效果做法_func(){
: runtime產生一張畫布,bitmap大小是你要做出效果的區域e.g.,按鈕A的範圍.
: 這邊說區域的意思是,可包含數個按鈕.
: 當收到click事件, 將光暈的圖, 用createGraphics()方法畫到bitmap裡面.
請問一下這裡的CreateGraphics是用哪個Control去Create的
: 同樣的將所有要更新畫面的圖都畫到bitmap裡面.
: 然後將bitmap畫到底層,
: 最後記得要dispose那張bitmap, 才不會有memory leak喔~ 咪啾
: }
: //希望對你有幫助
: ---
: 引用某人的話: 你只要xxx的從左邊拉一個UI過來就是失敗!
: 我不認同,因為開發過程將UI對齊之後紀錄座標是很重要的.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.137.72.96
※ 編輯: peiga 來自: 220.137.72.96 (06/23 07:56)
推 horngsh:bitmap1.CreateGraphics()? 06/23 13:48
推 Kelunyang:題外話,我發現WPF Form可以支援透明底圖XD 06/23 16:13