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提供的图形API,我们可以有效地处理这些问题,实现高效且精确的图片旋转功能。
在J2ME中实现任意角度图片旋转是一项技术挑战,涉及到图像处理、数学计算以及设备兼容性等多个方面。本文主要探讨如何在J2ME环境中解决这些问题,以实现高效、准确的图片旋转。 首先,我们需要理解基本的图像旋转...
在J2ME应用中,图片处理是一项重要的功能,涉及到对不同格式的图片进行加载、显示和操作。下面我们将深入探讨几种常见的图片格式及其特点,以及它们在J2ME中的应用。 1. **BMP格式**: BMP是Windows操作系统中的...
在IT行业中,J2ME(Java 2 Micro Edition)是一种专门用于开发移动设备和嵌入式系统的Java平台。它提供了一套精简的Java API,使得开发者能够在资源有限的设备上实现各种应用程序,包括游戏、多媒体应用等。在这个...
对于描述中的“箭头图标旋转”,我们可以创建一个`Image`对象加载箭头图片,然后在`Canvas`的`paint`方法中应用`rotate`方法,根据需求动态改变旋转角度,实现箭头的动态旋转效果。 接下来,我们讨论数组操作。描述...
在J2ME中,开发人员需要处理资源有限的环境,因此,提供中文输入功能是一个挑战,因为这需要在小型设备上实现复杂的字符编码和输入法。 本"J2ME中文输入Demo"旨在为开发者展示如何在J2ME环境中实现基本的中文输入...
本压缩包提供了一组J2ME游戏的图片素材,可用于创建或增强J2ME游戏的视觉效果。 这些图片素材(.png格式)包括但不限于角色、背景、图标、按钮、动画帧等,它们以数字编号命名,便于开发者在代码中引用和管理。例如...
本教程将深入讲解J2ME在手机程序开发中的应用,帮助开发者掌握这一核心技术。 ### J2ME技术概述 J2ME由两大部分构成:配置(Configurations)和框架(Profiles)。配置定义了运行时环境的基本特性,如内存大小和...
本文将深入探讨J2ME中旋转图形的核心知识点,包括使用的基本函数、步骤以及示例代码。 J2ME的图形渲染主要通过`Graphics`类来实现,它提供了一系列的方法用于绘制和操作2D图形。在J2ME中,我们可以使用`translate()...
**J2ME(Java 2 Micro Edition)**是Java平台的一个子集,主要用于开发和部署在小型设备上,如移动电话、智能手表、家用电器等嵌入式系统的应用程序。J2ME提供了丰富的API来实现这些设备上的功能,包括用户界面、...
J2ME中文教程 不错的学习资料,刚开始学习的可以参考下!
J2ME(Java 2 Micro Edition)是Java平台的一个重要组成部分,专为嵌入式设备、移动电话和其他资源有限的设备设计。这个J2ME中文版教程是针对初学者和有一定经验的开发者编写的,旨在深入浅出地讲解J2ME的基础知识和...
在J2ME(Java 2 Micro Edition)平台上进行移动应用开发时,资源管理是一个关键环节,尤其是图片资源。由于J2ME应用于各种低功耗、内存有限的设备,如早期的智能手机和平板,因此需要对图像文件进行优化,以确保应用...
Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在有限资源的设备上运行的应用程序,如移动电话、智能卡、家用电器和嵌入式系统。本教程是针对中文用户设计的,旨在帮助开发者深入理解和掌握J2ME...
J2ME,即Java 2 Platform, Micro Edition,是Sun Microsystems(现已被Oracle收购)推出的一种适用于资源受限设备(如手机、PDA、消费电子产品等)的Java平台。它提供了核心的Java API子集,以及针对移动设备特性的...
Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在小型设备上运行的应用程序,如移动电话、智能手表、嵌入式系统等。这份"j2me 文档 开发 官方 中文"是针对J2ME开发者的重要资源,它提供了官方的...
J2ME游戏开发中使用层的概念,J2ME编程学习,供初学者学习,含源码
这个标题“J2ME手机游戏图片编辑器”暗示了我们正在讨论的是一个运行在J2ME环境下的应用程序,它的主要功能是允许用户在手机上编辑游戏中的图片资源。 J2ME图片编辑器可能包含以下功能点: 1. **图像浏览与选择**...