管理旋转的移动栅格地图

时间:2009-11-27 12:43:55

标签: graphics bitmap rotation raster

我的应用程序提供了一个(光栅)移动地图。 我需要能够显示基于任何给定角度旋转的地图。 该程序目前在VC ++ / MFC中,但问题是通用的。 我有一个源位图(CBitmap或HBITMAP)并使用StretchBlt将其绘制到设备上下文(CDC)。 虽然这对于角度= 0而言工作快速且平滑(并且用户可以使用鼠标平滑地抓取地图),但如果我尝试旋转位图然后呈现它(使用SetWorldTransform()旋转位图,则不是这种情况或者这需要几百毫秒,这太慢了。)

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

如果有人有类似实施的经验,那么它可能会为我节省大量的试错工作。 谢谢!  阿维。

2 个答案:

答案 0 :(得分:2)

看起来SetWorldTransform非常慢: http://www.codeguru.com/Cpp/G-M/bitmap/specialeffects/article.php/c1743

虽然该文章中提出的其他选项更快,但当然还有其他更好的解决方案: http://www.codeguru.com/cpp/g-m/gdi/article.php/c3693/(查看有关修复和改进的评论)

此处还有一些非Windows中心快速旋转算法: http://www.ddj.com/windows/184416337?pgno=11

请注意,如果您保证2维的功率,则可以显着提高速度。

答案 1 :(得分:1)

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

  1. 我使用了http://www.codeguru.com/cpp/g-m/gdi/article.php/c3693/中提到的算法。

  2. 它可以提供相当好的性能和流畅的显示效果。

  3. 我需要修复一些错误以及简化公式和错误 在某些情况下代码。

  4. 我将研究http://www.ddj.com/windows/184416337?pgno=11中提到的算法,看看它是否提供了一些值得改编的突破性表现。

  5. 我的实现需要使用大型源位图,所以我需要修改代码,所以我不会每次都旋转整个位图,而只会旋转将在屏幕上显示的相关部分(否则性能将是不可接受的)。

  6. 阿维。