看板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)
1F:推 horngsh:bitmap1.CreateGraphics()? 06/23 13:48
2F:推 Kelunyang:题外话,我发现WPF Form可以支援透明底图XD 06/23 16:13