我想询问有关如何在Compact Framework中优化重绘的建议? GetHashCode()没有帮助,因为它总是返回不同的哈希码。
无论如何,我有一个程序,你可以在运行时拖动和调整对象的大小。此对象是透明对象,它具有PNG图像,该图像也相对于对象客户端大小动态调整大小。
虽然我注意到了,(例如我有4个透明对象,我正在拖动或调整其中一个)所有4个触发OnPaintBackground,即使3个没有移动。另一个当我只是点击一个对象时......它会触发onPaintBacground()。无论如何,当这个事件被触发时我没有问题。
我喜欢做的是优化,这意味着我只需要在必要时重新绘制对象。
你们可以提出建议吗?
这是我的伪C#代码
Bitmap _backBuff;
onResize() {
if(_backBuff != null) _backBuff.Dispose();
_backBuff = new Bitmap(ClientSize.Width, ClientSize.Height);
Invalidate();
}
onPaintBackground(e) /*have to use onPaintBackground because MSDN said it's faster*/ {
using(Graphics g = Graphics.FromImage(_backBuff)) {
g.Clear(Color.Black);
// draw background
....some interface calling here
....and paint the background
// draw alpha PNG
.. get hDc
.. paint PNG
.. release hDc
}
e.Graphics.DrawImage(_backBuff,0,0);
}
提前致谢。
答案 0 :(得分:1)
有个主意
我必须检查旧位置之间的新位置或新尺寸差异。如果其中一个是新的,那么重新绘制.. else ..绘制_backBuff(用作缓存图像)。
我实现了它,到目前为止看起来很好的重新绘制或绘制缓存。