我正在开发一个WinCE 6.0设备的应用程序,其中需要旋转屏幕,因此我们使用典型的ChangeDisplaySettingsEx()
API。而且我在View上画了一些东西。
从memDC
到主DC的blitting,在横向模式下,700x300像素需要20ms,但在纵向模式下,blx 450x450块需要50 ms。
我无法确定发生这种情况的原因。以下是设备配置: - 800x480分辨率。我正在使用普通Blt()
API。
任何建议都会有所帮助
答案 0 :(得分:2)
我对WinCE一无所知,但如果复制算法逐行工作,则性能差异是合乎逻辑的。
在一种模式下,视频RAM中屏幕上像素的布局是相同的。如果是这种情况,屏幕上的一行对应于多个连续的内存地址。
在纵向模式下,算法需要为每个新像素访问新的内存位置。虽然像素紧挨着彼此,但内存地址不是。
答案 1 :(得分:0)
据我所知,设备屏幕的绘制顺序是垂直逐行的。 在横向模式下,绘制480行。并在纵向模式下绘制800行。 扫描一行需要更多时间。
答案 2 :(得分:0)
我遇到了同样的问题,我的解决方案是将我自己的旋转位图blit例程直接滚动到显示缓冲区。自从20世纪80年代中期以来,BitBlt和StretchBlt编写得很糟糕且保持不变(我已经看到了Windows GDI的源代码)。在“错误”的方向上进行bitblt仍然会比较慢,但它并不一定要那么慢。问题是小处理器缓存因非顺序写入内存而被打乱。