到 Google 资讯主页   
EasyJF首页   资料   源码   软件    论坛   网站    
   使用帮助    
    该信息为本站MyRSS系统缓存内容,部分图片及附件有可能无法正常使用.easyjf.comwww.javaresearch.org无关,不对该信息负责.通过http://www.javaresearch.org/article//showarticle.jsp?column=3&thread=39449访问该信息的原始内容.
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   
在MIDP1.0下实现图片翻转
作者:Jagie 来源:www.javaresearch.org  发布时间:2006-02-27 15:36:09.25



正文


    我们知道,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. }

运行效果图如下:
  
  

作者简介


陈万飞,网名Jagie,培训师,爱好java技术.可通过chen_cwf@163.com与他联系

 
相关文章
 
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   


EasyJF.com 2006 隐私政策 使用EasyJF前必读