Graphics 管理旋转移动光栅地图

Graphics 管理旋转移动光栅地图,graphics,bitmap,rotation,raster,Graphics,Bitmap,Rotation,Raster,我的应用程序提供了一个(光栅)移动地图。 我需要能够显示地图旋转的基础上任何给定的角度。 该程序目前使用VC++/MFC,但问题是通用的。 我有一个源位图(CBitmap或HBITMAP),并使用StretchBlt将其绘制到设备上下文(CDC)。 当角度为0时,这种方法可以快速平滑地工作(用户可以用鼠标平稳地抓取贴图),但如果我尝试旋转位图然后显示它,则情况并非如此(使用SetWorldTransform()左右旋转位图需要数百毫秒,速度太慢) 我认为解决方案是只与当前屏幕上的像素相关,而不旋

我的应用程序提供了一个(光栅)移动地图。 我需要能够显示地图旋转的基础上任何给定的角度。 该程序目前使用VC++/MFC,但问题是通用的。 我有一个源位图(CBitmap或HBITMAP),并使用StretchBlt将其绘制到设备上下文(CDC)。 当角度为0时,这种方法可以快速平滑地工作(用户可以用鼠标平稳地抓取贴图),但如果我尝试旋转位图然后显示它,则情况并非如此(使用SetWorldTransform()左右旋转位图需要数百毫秒,速度太慢)

我认为解决方案是只与当前屏幕上的像素相关,而不旋转原始源位图,这是关键

如果有人有类似实现的经验,那么它可能会为我节省大量的尝试和错误工作。 谢谢
Avi.

看起来SetWorldTransform非常慢:

虽然本文中介绍的其他选项速度更快,但当然还有其他更好的解决方案,如: (检查注释以获得修复和改进)

还有一些非以Windows为中心的快速旋转算法:


请注意,如果您保证2维的功率,您可以获得显著的速度提升。

作为我的问题和提供的答案的后续,让我总结以下内容:

  • 我使用了上节提到的算法

  • 它工作正常,提供了相当好的性能和流畅的显示

  • 其中有一些错误,我需要修复,并简化公式和操作 在某些情况下使用代码

  • 我将检查在中提到的算法,看看它是否提供了一些值得改进的突破性性能

  • 我的实现需要使用一个大的源位图,所以我需要修改代码,这样我就不会每次旋转整个位图,而是只旋转屏幕上显示的相关部分(否则性能将无法接受)


  • Avi.

    在第一篇文章中,他们说:“GetRotatedBitmapNT()这个函数是特定于NT的,在Windows95上不起作用。它是本主题中列出的三个函数中最简单的,可能也是最快的。”所以据我所知,他们声称GetRotatedBitmapNT()可能是最快的。但如果我发现了突破,我会查看其他链接并更新回来。非常感谢。。。阿维。