J2me中任意角度图片旋转
作者:pandonix
日期:2007年9月20日
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
原文地址:
http://pandonix.iteye.com/
本文主要讨论在J2me中如何实现任意角度的图片旋转。其实,早在几年前,minisoyou的BB就已经给出了实现算法,相信做j2me游戏开发的朋友们也都收藏过该算法。本文从图像旋转的基本理论出发,详细讨论如何使用实现和优化该算法,希望对旋转算法感兴趣的朋友有帮助。
基本旋转算法: 讨论位图旋转算法,首先得说说最基本的旋转算法,即:点的旋转。相信学过计算机图形学的朋友们,对该算法不会陌生。
假设,P(x,y)旋转t角度后,得到P’(x’,y’),P与P’之间的关系如下:
(x’,y’) = (x cos(t) + y sin(t),y cos(t) - x sin(t))
位图旋转: 根据以上算法,可以直观的想到位图旋转算法,即遍历位图中的所有像素点,对每个像素点进行旋转变换。
但是在j2me中真正实现位图的旋转,还需要解决以下几点问题:
1、如何获取图片的像素数组,且得到的像素值是包含了alpha高位的,换句话说,要支持透明;
2、由于是任意角度旋转,旋转后的图像尺寸如何计算;
3、旋转算法可以优化,提高计算速度;
4、旋转得到的像素数组,如何绘制到canvas上;
5、旋转后能否直接得到一个Image对象;
6、旋转算法都是基于小数运算的,在CLDC1.0的设备上,如何实现旋转;
7、旋转后的图像是否存在失真;
J2me中的像素操作熟悉j2me的朋友对于问题一的回答应该是肯定的。我们有两种方法获取像素数组,一种是使用midp2.0中的getRGB方法,另一种是使用NokiaUI中的getPixels方法,两种方法各有优缺点。其中,getRGB方法并非所有midp2.0都手机都支持,本人在Nokia6600上面使用该方法就出现问题,除此之外,getRGB只能获取到8888格式的ARGB像素值,即通常说的256色。而NokiaUI重载了三个getPixels方法,不仅支持8888格式,还支持4444格式,即,可以使用short数组来存储像素值,而无须使用int数组。 由于getRGB方法很简单,参考API文档就能使用,所以,在此只列出NokiaUI中如何获取像素数组:
java 代码
- public short[] pixelsProduce(Image src)
- {
- int w = src.getWidth();
- int h = src.getHeight();
- short[] _pixels = new short[w * h];
-
- Image img = DirectUtils.createImage(w, h, 0);
- Graphics g = img.getGraphics();
- DirectGraphics dg = DirectUtils.getDirectGraphics(g);
-
- dg.drawImage(src,0,0,0,0);
-
- dg.getPixels(_pixels,0, w, 0, 0, w, h,4444);
- return _pixels;
- }
解决了获取图片像素数组的问题,绘制旋转后的像素数组的问题也迎刃而解了。Midp2.0中,可以使用drawRGB,而NokiaUI中,则使用drawPixels。当然,如果考虑到绘制的效率,可以将像素数组转化为Image对象,这样虽然创建时耗费了时间,但是在绘制时,却比直接绘制像素数组更加有效率。为此,Midp2.0中,可使用Image.createRGBImage方法,而NokiaUI中,则可以采用以下方法来获取Image对象:
java 代码
- public Image createImg(short[] pixels,int _width,int _height)
- {
-
- Image img = DirectUtils.createImage(_width, _height, 0);
- Graphics g = img.getGraphics();
- DirectGraphics dg = DirectUtils.getDirectGraphics(g);
-
- dg.drawPixels(pixels, true, 0, _width, 0, 0, _width, _height, 0,4444);
- return img;
- }
分享到:
相关推荐
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 中文教程
全面覆盖MIDP2.0,丰富的示范代码,...本教程是为了学习J2ME MIDP 技术的开发者准备的。尽管本教程内容涉及初学阶段,但本教程不仅仅是一本入门的读物,很多的内容的详细程度对于有经验的开发者来说,也是很多脾益的。
我应该学习此教程吗? 第 1 页(共 3 页) 本教程详细审查了袖珍版...之后您将构造一个简单的应用程序来看看您能用 J2ME 做些什么。您将使用 CLDC 和 KJava 开发一个基本绘图应用程序以及一个小型 MIDP 应用程序。
J2ME的中文教程,值得看一下!