PACS 中使用J2me中任意角度图片旋转

获得积分
资料库会员登录
搜索: [高级搜索]
下载首页 | 资源分类 | 下载排行
您的位置: 首页 > PACS/RIS > PACS RIS 实施及方案相关
 
分类导航
下载排行
最新资源
PACS 中使用J2me中任意角度图片旋转
资源大小:10.79 KB 资源类型:文档
下载积分: 1
更多
-->
下载统计:总下载:0,本月下载:0,本周下载:0,今日下载:0
发表评论 错误报告 加入收藏夹
资源介绍
J2me中任意角度图片旋转(一)(转载)2007-09-23 12:00原文位置:http://mobile.csdn.net/page/4367e2f2-01b3-4ab9-8ba0-7f6cf90b7974

作者:pandonix

日期:2007年9月20日

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明

原文地址:

http://pandonix.javaeye.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;
下载地址
 下载地址1
按字母检索

下载须知:
大部份资源无需注册即可下载
需要积分的资源要在会员中心注册会员并用 积分体系中提示的方法赚取积分才能下载。

免责声明:
所有资源只能用于参考学习,不能用于任何商业用途,否则后果自负!