站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题在MIDP1.0下实现图片翻转[转贴]

在MIDP1.0下实现图片翻转[转贴]

摘要: 在MIDP1.0下实现图片翻转[转贴]

我们知道,MIDP1.0中并没有提供图片翻转的功能。但是在MIDP2.0中,我们可以利用Sprite的setTransform(int transform)方法来达到目的。在该方法中,transform参数的取值范围为8个常量之一,这8个常量分别是:
Sprite.TRANS_MIRROR:让精灵左右镜像变换
Sprite.TRANS_MIRROR_ROT180: 让精灵左右镜像变换后,再绕其中心顺时针旋转180度
Sprite.TRANS_MIRROR_ROT270: 让精灵左右镜像变换后,再绕其中心顺时针旋转270度
Sprite.TRANS_MIRROR_ROT90: 让精灵左右镜像变换后,再绕其中心顺时针旋转90度
Sprite.TRANS_NONE: 对精灵不做任何变换
Sprite.TRANS_ROT180: 让精灵绕其中心顺时针旋转180度
Sprite.TRANS_ROT270: 让精灵绕其中心顺时针旋转270度
Sprite.TRANS_ROT90: 让精灵绕其中心顺时针旋转90度

尽管MIDP1.0不直接提供图片翻转的功能,不过我们只要利用creatImage,setClip,drawImage等方法,也可以在MIDP1.0的运行环境下模拟出图片翻转的效果,不过在创建可变图片的时候,在很多手机上只能创建背景为白色的空白图片,颇为遗憾。下面就是一个创建翻转图片的工具类的例子。



import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
* 图像工具类
*
* @author Jagie
*
*/

public class ImageUtil {
/**
* 变换常量,同javax.microedition.lcdui.game.Sprite中的变换常量
*/
public final static int TRANS_MIRROR = 2;

public final static int TRANS_NONE = 0;

public final static int TRANS_ROT90 = 5;

public final static int TRANS_ROT180 = 3;

public final static int TRANS_ROT270 = 6;

public final static int TRANS_MIRROR_ROT90 = 7;

public final static int TRANS_MIRROR_ROT180 = 1;

public final static int TRANS_MIRROR_ROT270 = 4;

public static final Image transformImage(Image srcImage, int transform) {
Image result = null;
int srcW = srcImage.getWidth();
int srcH = srcImage.getHeight();
Graphics g = null;
switch (transform) {
//不做任何变换
case TRANS_NONE:
result = Image.createImage(srcImage);
break;
//左右镜像变换
case TRANS_MIRROR:
result = Image.createImage(srcW, srcH);
g = result.getGraphics();
for (int i = 0; i < srcW; i++) {
g.setClip(i, 0, 1, srcH);
g.drawImage(srcImage, i * 2 - srcW, 0, Graphics.TOP
| Graphics.LEFT);

}
break;
//顺时针旋转90度
case TRANS_ROT90:
result = Image.createImage(srcH, srcW);
g = result.getGraphics();
for (int i = 0; i < srcH; i++) {
for (int j = 0; j < srcW; j++) {
g.setClip(i, j, 1, 1);
g.drawImage(srcImage, i - j, i + j - srcH, Graphics.TOP
| Graphics.LEFT);
}

}
break;
//先左右镜像变换,再顺时针旋转270度
case TRANS_MIRROR_ROT270:
result = Image.createImage(srcH, srcW);
g = result.getGraphics();
for (int i = 0; i < srcH; i++) {
for (int j = 0; j < srcW; j++) {
g.setClip(i, j, 1, 1);
g.drawImage(srcImage, i - j, j - i, Graphics.TOP
| Graphics.LEFT);
}

}
break;
//顺时针旋转180度
case TRANS_ROT180:
result=transformImage(srcImage,TRANS_MIRROR_ROT180);
result=transformImage(result,TRANS_MIRROR);
break;
//先左右镜像变换,再顺时针旋转180度,相当于上下镜像变换
case TRANS_MIRROR_ROT180:
result = Image.createImage(srcW, srcH);
g = result.getGraphics();
for (int i = 0; i < srcH; i++) {
g.setClip(0, i, srcW, 1);
g.drawImage(srcImage, 0, 2*i-srcH, Graphics.TOP
| Graphics.LEFT);

}
break;
//先左右镜像变换,再顺时针旋转90度。相当于先顺时针旋转90度,再上下镜像变换
case TRANS_MIRROR_ROT90:
result=transformImage(srcImage,TRANS_ROT90);
result=transformImage(result,TRANS_MIRROR_ROT180);
break;
//顺时针旋转270度。相当于先TRANS_MIRROR_ROT270,再上下镜像变换
case TRANS_ROT270:
result=transformImage(srcImage,TRANS_MIRROR_ROT270);
result=transformImage(result,TRANS_MIRROR_ROT180);
break;

}


return result;
}

}




↑返回目录
前一篇: J2ME移动开发平台搭建篇〔转贴〕
后一篇: 使用LayerManager管理多个游戏图层