首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

J2me中任意角度图片旋转(3)

2012-09-28 
J2me中任意角度图片旋转(三)? J2me中任意角度图片旋转? public?static?int[]?rotate3(int[]?_pixels,int?_

J2me中任意角度图片旋转(三)

? J2me中任意角度图片旋转

?

  1. public?static?int[]?rotate3(int[]?_pixels,int?_width,int?_height,double?_angle) ?? { ??
  2. ????int?i,j; ?? ????double?radius?=?Math.sqrt(_width*_width?+?_height*_height); ??
  3. ????int?r?=?(int)radius; ?? ????int[]?newPixels?=?new?int[r*r]; ??
  4. ????for(i?=?0;?i?<?newPixels.length;i++) ?? ????{ ??
  5. ????????????newPixels[i]?=?(TRANSPARENT)<<24; ?? ????} ??
  6. ????double?x2,y2; ?? ????int?x3,y3; ??
  7. ????double?cos?=?Math.cos(_angle); ?? ????double?sin?=?Math.sin(_angle); ??
  8. ????for(i?=?0;i?<?r;i++) ?? ????{ ??
  9. ????????x2?=?(-r/2)*cos?+?(i?-?r/2)*sin; ?? ????????y2?=?(r/2)*sin?+?(i?-?r/2)*cos; ??
  10. ????????x3?=?(int)x2; ?? ????????y3?=?(int)y2; ??
  11. ????????for(j?=?0;j?<?r;j++) ?? ????????{ ??
  12. ????????????if(x3?>=?-_width/2&&x3<?_width/2&&y3?>=?-_height/2&&y3<?_height/2) ?? ????????????{ ??
  13. ????????????????newPixels[i*r?+j]?=?_pixels[(y3?+?_height/2)*_width+x3+_width/2]; ?? ????????????} ??
  14. ????????????x2?+=?cos; ?? ????????????y2?-=?sin; ??
  15. ????????????x3?=?(int)x2; ?? ????????????y3?=?(int)y2; ??
  16. ????????} ?? ????} ??
  17. ????return?newPixels; ?? } ??

?

使用定点数实现其实,主要就是实现Sin和Cos的求值,基本思路是:将Sin和Cos值放大255倍,进行计算以后,对结果再进行缩小处理,具体请参考代码Rotation2.javaBB的算法应该说,BB给出的算法的失真程度最小,他是对目标像素点进行了一个加权计算,但是,遗憾的是,翻阅了很多资料,我也没有找到该算法的相关理论介绍。若有朋友了解,请正解。具体代码请参考Rotation_4444.java总结与思考

总的说来,旋转后的位图都存在不同情况的失真,所以在实际开发过程中,需要视情况而定。除此之外,不同的终端对于透明的不同,例如,K700在透明方面问题就比较多。

1 楼 pandonix 2007-09-21   网速太慢,代码明天再传 2 楼 wuhua 2007-10-05   不错,支持写的很详细

热点排行