日期:2014-05-17  浏览次数:20861 次

为什么执行这一句FillRegion(Brush brush,Region region)要花很长时间,超过600ms

C# code

            TextureBrush bgimgBruch = new TextureBrush(m_bgImage);
            GraphicsPath bgimgPath = new GraphicsPath();
            Region eRegion = null;

//.....  eRegion 在这里创建, 并执行了多次Uinon(超过600次)操作。

            System.Diagnostics.Stopwatch timer2 = new System.Diagnostics.Stopwatch();//new一个stopwatch
            timer2.Start();
            g.FillRegion(bgimgBruch, eRegion);
            timer2.Stop();

            FileLog.WriteInfo("Draw(Graphics g) ", "Region Spend time: " + timer.ElapsedMilliseconds.ToString() + " FillRegion Spend time: " + timer2.ElapsedMilliseconds.ToString());





 g.FillRegion(bgimgBruch, eRegion); 这句话的执行时间跟前面eRegion 执行Union的次数成一个比例关系。eRegion是很多不规则图像的组合。 但这个语句执行速度也太慢了, 超过600ms, 再多一点估计更慢。 


 有什么办法提高这个画图的速度吗?

------解决方案--------------------
图形太复杂
------解决方案--------------------
有,把复杂图形转换为字体然后绘制,速度立马上升
------解决方案--------------------
FillRegion本身效率不高,别奢求了