J2me中任意角度图片旋转
作者:pandonix
日期:2007年9月20日
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
原文地址:
http://pandonix.iteye.com/
本文主要讨论在J2me中如何实现任意角度的图片旋转。其实,早在几年前,minisoyou的BB就已经给出了实现算法,相信做j2me游戏开发的朋友们也都收藏过该算法。本文从图像旋转的基本理论出发,详细讨论如何使用实现和优化该算法,希望对旋转算法感兴趣的朋友有帮助。
算法实现排除了像素操作的障碍以后,就可以来实现旋转算法了。首先,考虑使用小数来实现该算法。接下来需要考虑的问题是,旋转后的图片的尺寸该设定为多大,因为其直接影响到旋转后的像素数组的大小。不考虑存储空间的情况下,可以如此定义尺寸:原图片矩形的外接圆的外切矩形,就是旋转后图片所在的矩形,如图所示。虽然,这样定义比较浪费空间,但是,原图片沿任意角度选择后的像素数组都可以被覆盖到。定义好尺寸之后,最基本的旋转算法就容易了,算法步骤如下:1、计算旋转后图片尺寸,并定义好旋转后像素数组newPixels[];2、将newPixels的各数组元素初始化为透明,即:0x0;3、按从左到右,从上到下的顺序,遍历原图片数组,计算出每个像素点旋转后的坐标,并将其复制到newPixels中 算法代码如下:
java 代码
- public static int[] rotate2(int[] _pixels,int _width,int _height,double _angle)
- {
- int i,j;
- double radius = Math.sqrt(_width*_width + _height*_height);
- int r = (int)radius;
- int[] newPixels = new int[r*r];
- for(i = 0; i < newPixels.length;i++)
- {
- newPixels[i] = (TRANSPARENT)<<24;
- }
- double x1,y1;
- int x2,y2;
- double cos = Math.cos(_angle);
- double sin = Math.sin(_angle);
- for(i = 0; i < _height;i++)
- {
- for(j = 0;j < _width;j++)
- {
- x1 = j + (- _width)/2;
- y1 = i + (- _height)/2;
- x2 = (int)(x1*cos - y1*sin);
- y2 = (int)(x1*sin + y1*cos);
- x2 += r/2;
- y2 += r/2;
- newPixels[y2*r+x2] = _pixels[i*_width+j];
- }
- }
- return newPixels;
- }
实现后的效果如图所示,基本上实现了旋转。但遗憾的是,旋转后的图像明显存在“坏点”,在图像中,有很多像素点没有被映射到,所以没有像素值,造成了该点仍然是透明的。而且,图片的失真程度不能接受。
- 描述: 初步实现效果
- 大小: 430.3 KB
分享到:
相关推荐
J2me中任意角度图片旋转 J2me中任意角度图片旋转
J2ME任意角旋转图片的算法研究 (注意:使用Office 2007打开)
J2me中文教程.pdf J2me中文教程.pdf
图片的特点及分类; png图片的格式 分析; 图片在J2me中的应用。
在j2me中,通过对像素点的操作,完成对图片的任意角度的旋转.
J2ME中文教程 不错的学习资料,刚开始学习的可以参考下!
j2me 文档 开发 官方 中文 j2me 文档 开发 官方 中文 j2me 文档 开发 官方 中文
J2ME 中文api以及应用 J2ME 中文api以及应用.rar
J2ME游戏开发中使用层的概念,J2ME编程学习,供初学者学习,含源码
J2ME开发 J2ME开发 J2ME开发 J2ME开发
j2me图片编辑器 j2me 手机游戏图片编辑器
J2ME中文教程 J2ME中文教程
j2me中文教程
J2ME中文API J2ME中文API帮助文档
J2ME 中文教程
J2ME的中文教程,值得看一下!
J2ME中png图片处理压缩,有代码,通俗易懂
j2me中改变图片大小,不错,给大家分享下,是一个静态方法,放程序里面直接调用就好!
J2ME中文教程 适合初学者学习的好书 很好很强大!多多下载 多多学习 共同进步!