当前位置: 代码迷 >> WinCE >> 怎么旋转位图(HBITMAP),高分请问
  详细解决方案

怎么旋转位图(HBITMAP),高分请问

热度:144   发布时间:2016-04-28 13:48:48.0
如何旋转位图(HBITMAP),高分请教
如题,
不知道有没有什么现成的函数?
有什么好的资料吗?
先谢谢了

------解决方案--------------------
IImage
------解决方案--------------------
旋转算法到处都是,你直接转DIB就行了。
------解决方案--------------------
少人是因为你这问题实在没啥意思。

这种问题,在网上搜索一下,有几千个答案。
------解决方案--------------------
没有现成的函数,算法和代码到处都有
------解决方案--------------------
探讨
没有现成的函数,算法和代码到处都有

------解决方案--------------------
你用函数PlgBlt()你自己看看函数传入的3个POINT点参数不同就可以达到旋转的效果的 不过精确度一般
------解决方案--------------------
探讨
引用:
少人是因为你这问题实在没啥意思。

这种问题,在网上搜索一下,有几千个答案。

----------------------------------
但是那些算法效率太低了,我旋转一个500x400的图片要6,7秒啊,
这么慢远远达不到要求
我想问的是有没有高效的算法

------解决方案--------------------
探讨
引用:
少人是因为你这问题实在没啥意思。

这种问题,在网上搜索一下,有几千个答案。

----------------------------------
但是那些算法效率太低了,我旋转一个500x400的图片要6,7秒啊,
这么慢远远达不到要求
我想问的是有没有高效的算法

------解决方案--------------------
就是浮点换整数,内存换速度的优化技术,网上到处都是-_-0

1.对于0,90,180,270,360之类的角度,何必再去调用sin cos等函数计算位置?直接用整数值代替就行了,你不觉得调用数字计算比调用函数会快一点吗,何况要调用500x400x3次?

2.类似取sin(1)~sin(360)之类的公式,完全可以用一个360个元素的整数数组替代。浮点可采用近似整数值替代或者用更好的转整数算法。

3.内存操作优化。

4.流水线优化。

5.函数级优化

等等还有很多地方可以优化,没事多看书吧,写软件没看过内存及代码优化技术的书是不行的。


------解决方案--------------------
我把NBCOOL老大的话补充说明一下:)你就是用一张有360个元素的表代替SIN COS的运算,比如你求SIN(1)的话就直接查表了,而不是用math.h当中的SIN去算:)然后看下有关的资料是不是并根据相应的情况,看看到底是内存重要还是效率重要。做下优化。
另外提醒一下,尽量不要过于频繁的NEW DELETE,那样内存碎片太多,反而不好。
------解决方案--------------------
探讨
经过优化,速度大大提高了,
500*400的图片1秒了,2592*3800的也才3秒左右

再次感谢nbcool BEYONDMA