【问题标题】:Is it less expensive to dc->DrawLine() a bunch of times or one blit?dc->DrawLine() 多次还是一次 blit 是否更便宜?
【发布时间】:2010-10-29 20:47:03
【问题描述】:

我有一个带有网格的控件。每次使用设备上下文类中的绘制线函数绘制构成网格的水平和垂直线是否更昂贵,或者将网格绘制一次到内存设备上下文然后每次将其blit到窗户直流?谢谢。

【问题讨论】:

    标签: c++ winapi graphics gdi


    【解决方案1】:

    这取决于很多事情,包括你有多少行,网格有多大,以及用户有什么显卡。

    最好的办法是只做其中一个(可能是 DrawLine,我的直觉认为它既简单又快速),然后在慢速机器上进行测试。如果它可以工作并且速度足够快,请不要过早地优化它。

    【讨论】:

    • +1:建议尝试两者并记录结果 - 很好的答案:-)
    • 来自“伟大的编程名言”问题:“我们应该忘记小的效率,比如说大约 97% 的时间:过早的优化是万恶之源。” - 唐纳德·高德纳
    【解决方案2】:

    另一个选项:创建一个画笔,使用网格图案和FillRect() 区域。根据我的经验,大多数情况下,这是最快的方法。

    但是,“RichieHindle”是对的;如果您仅通过测量速度就可以掌握事实,则无需对此进行哲学思考;)..

    【讨论】:

      【解决方案3】:

      A 做了一个这样的控件,当需要更新单元格时,我为每个单元格绘制了边框。 (这只是另一种想法)

      【讨论】:

        【解决方案4】:

        这还取决于您使用的是哪种笔。对于简单的纯色水平和垂直线,IIRC 填充矩形通常是最快的,但执行您自己的基准测试应该相当简单。

        【讨论】:

          【解决方案5】:

          简答:后者。 Blitting 到内存 DC 一次,以便它可以用作后续重新绘制操作的位图,通常是更快的渲染方法。

          【讨论】:

            【解决方案6】:

            Blitting 是首选,因为它会将图像复制到内存中。复制图片,绘制时应防止闪烁。

            【讨论】:

              猜你喜欢
              • 2022-07-29
              • 2018-01-15
              • 2015-03-27
              • 2016-02-02
              • 1970-01-01
              • 1970-01-01
              • 2012-11-21
              • 2015-10-20
              • 1970-01-01
              相关资源
              最近更新 更多