【问题标题】:Blit() Performance dependent on screen rotationBlit() 性能取决于屏幕旋转
【发布时间】:2011-11-26 09:26:20
【问题描述】:

我正在为需要旋转屏幕的 WinCE 6.0 设备开发应用程序,因此我们使用典型的ChangeDisplaySettingsEx() API。我也在视图上画一些东西。

在从memDC 向主 DC 传输时,横向模式下 700x300 像素需要 20 毫秒,但在纵向模式下传输 450x450 块需要 50 毫秒。

我无法确定发生这种情况的原因。这是设备配置:- 800x480 分辨率。我为此使用 Normal Blt() API。

任何建议都会有所帮助

【问题讨论】:

    标签: mfc windows-ce


    【解决方案1】:

    我对WinCE一无所知,但是如果复制算法逐行工作,性能差异是合乎逻辑的。

    在一种模式下,屏幕上的像素布局和视频 RAM 中的像素布局是相同的。如果是这种情况,屏幕上的一行对应于多个连续的内存地址。

    在纵向模式下,算法需要为每个新像素访问一个新的内存位置。尽管像素彼此相邻,但内存地址却不是。

    【讨论】:

    • 是的,在 CE 中也是如此。
    【解决方案2】:

    据我所知,设备屏幕的绘制顺序是垂直逐行绘制的。 在横向模式下,可绘制 480 条线。在纵向模式下,可以绘制 800 条线。 哪里扫描一行需要更多时间。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我的解决方案是将我自己的旋转位图 blit 例程直接滚动到显示缓冲区。 BitBlt 和 StretchBlt 写得不好,自 1980 年代中期以来一直保持不变(我已经看过 Windows GDI 的源代码)。在“错误”方向上 bitblt 仍然会更慢,但不必那么慢。问题是小型处理器缓存因不按顺序写入内存而受到破坏。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多