Mfc Blit()性能取决于屏幕旋转

Mfc Blit()性能取决于屏幕旋转,mfc,windows-ce,Mfc,Windows Ce,我正在为WinCE 6.0设备开发一个应用程序,其中需要旋转屏幕,因此我们正在使用典型的ChangeDisplaySettingsEx()API。我也在风景上画些东西 从memDC到主DC的闪烁时,在横向模式下700x300像素需要20ms,但在纵向模式下闪烁450x450块需要50ms 我无法确定为什么会发生这种情况。以下是设备配置:-800x480分辨率。我使用的是普通的Blt()API 任何建议都会有帮助我对WinCE一无所知,但如果复制算法逐行运行,性能差异是合乎逻辑的 在一种模式中,屏

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

memDC
到主DC的闪烁时,在横向模式下700x300像素需要20ms,但在纵向模式下闪烁450x450块需要50ms

我无法确定为什么会发生这种情况。以下是设备配置:-800x480分辨率。我使用的是普通的
Blt()
API


任何建议都会有帮助

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

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


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

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

我遇到了同样的问题,我的解决方案是将自己的旋转位图blit例程直接滚动到显示缓冲区。BitBlt和StretchBlt编写得很糟糕,自20世纪80年代中期以来一直没有改变(我已经看到了Windows GDI的源代码)。在“错误”的方向上bitblt仍然会比较慢,但也不必那么慢。问题是,小处理器缓存正在通过非顺序写入内存而被破坏。

是的,这在CE中也适用。