在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的运行环境下模拟出图片翻转的效果,不过在创建可变图片的时候,在很多手机上只能创建背景为白色的空白图片,颇为遗憾。下面就是一个创建翻转图片的工具类的例子。

  1. import javax.microedition.lcdui.Graphics;
  2. import javax.microedition.lcdui.Image;
  3. /**
  4.  * 图像工具类
  5.  * 
  6.  * @author Jagie
  7.  * 
  8.  */
  9. public class ImageUtil {
  10.     /**
  11.      * 变换常量,同javax.microedition.lcdui.game.Sprite中的变换常量
  12.      */
  13.     public final static int TRANS_MIRROR = 2;
  14.     public final static int TRANS_NONE = 0;
  15.     public final static int TRANS_ROT90 = 5;
  16.     public final static int TRANS_ROT180 = 3;
  17.     public final static int TRANS_ROT270 = 6;
  18.     public final static int TRANS_MIRROR_ROT90 = 7;
  19.     public final static int TRANS_MIRROR_ROT180 = 1;
  20.     public final static int TRANS_MIRROR_ROT270 = 4;
  21.     public static final Image transformImage(Image srcImage, int transform) {
  22.         Image result = null;
  23.         int srcW = srcImage.getWidth();
  24.         int srcH = srcImage.getHeight();
  25.         Graphics g = null;
  26.         switch (transform) {
  27.         //不做任何变换
  28.         case TRANS_NONE:
  29.             result = Image.createImage(srcImage);
  30.             break;
  31.         //左右镜像变换    
  32.         case TRANS_MIRROR:
  33.             result = Image.createImage(srcW, srcH);
  34.             g = result.getGraphics();
  35.             for (int i = 0; i < srcW; i++) {
  36.                 g.setClip(i, 0, 1, srcH);
  37.                 g.drawImage(srcImage, i * 2 - srcW, 0, Graphics.TOP
  38.                         | Graphics.LEFT);
  39.             }
  40.             break;
  41.         //顺时针旋转90度    
  42.         case TRANS_ROT90:
  43.             result = Image.createImage(srcH, srcW);
  44.             g = result.getGraphics();
  45.             for (int i = 0; i < srcH; i++) {
  46.                 for (int j = 0; j < srcW; j++) {
  47.                     g.setClip(i, j, 1, 1);
  48.                     g.drawImage(srcImage, i - j, i + j - srcH, Graphics.TOP
  49.                             | Graphics.LEFT);
  50.                 }
  51.             }
  52.             break;
  53.         //先左右镜像变换,再顺时针旋转270度
  54.         case TRANS_MIRROR_ROT270:
  55.             result = Image.createImage(srcH, srcW);
  56.             g = result.getGraphics();
  57.             for (int i = 0; i < srcH; i++) {
  58.                 for (int j = 0; j < srcW; j++) {
  59.                     g.setClip(i, j, 1, 1);
  60.                     g.drawImage(srcImage, i - j, j - i, Graphics.TOP
  61.                             | Graphics.LEFT);
  62.                 }
  63.             }
  64.             break;
  65.         //顺时针旋转180度    
  66.         case TRANS_ROT180:
  67.             result=transformImage(srcImage,TRANS_MIRROR_ROT180);
  68.             result=transformImage(result,TRANS_MIRROR);
  69.             break;
  70.         //先左右镜像变换,再顺时针旋转180度,相当于上下镜像变换
  71.         case TRANS_MIRROR_ROT180:
  72.             result = Image.createImage(srcW, srcH);
  73.             g = result.getGraphics();
  74.             for (int i = 0; i < srcH; i++) {
  75.                 g.setClip(0, i, srcW, 1);
  76.                 g.drawImage(srcImage, 0, 2*i-srcH, Graphics.TOP
  77.                         | Graphics.LEFT);
  78.             }
  79.             break;
  80.         //先左右镜像变换,再顺时针旋转90度。相当于先顺时针旋转90度,再上下镜像变换    
  81.         case TRANS_MIRROR_ROT90:
  82.             result=transformImage(srcImage,TRANS_ROT90);
  83.             result=transformImage(result,TRANS_MIRROR_ROT180);
  84.             break;
  85.         //顺时针旋转270度。相当于先TRANS_MIRROR_ROT270,再上下镜像变换
  86.         case TRANS_ROT270:
  87.             result=transformImage(srcImage,TRANS_MIRROR_ROT270);
  88.             result=transformImage(result,TRANS_MIRROR_ROT180);
  89.             break;
  90.             
  91.         }
  92.         
  93.         
  94.         return result;
  95.     }
  96. }


运行效果图如下:

   

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值