Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7279076
  • 博文数量: 512
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6857
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(512)

文章存档

2024年(2)

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: 项目管理

2011-08-07 11:02:32

j2me三种图片切割方法之效率比较

* import java.io.IOException;  
    *

    * import javax.microedition.lcdui.Canvas;  
    * import javax.microedition.lcdui.CommandListener;  
    * import javax.microedition.lcdui.Display;  
    * import javax.microedition.lcdui.Graphics;  
    * import javax.microedition.lcdui.Image;  
    * import javax.microedition.lcdui.game.Sprite;  
    * import javax.microedition.midlet.MIDlet;  
    * import javax.microedition.midlet.MIDletStateChangeException;  
    *

    * //TestMIDlet.java
    * /**
    * * @author boolean 链接标记liuhao137310@163.com:
    * * @version 创建时间:2008-12-31 下午04:57:42  
    * * 用三种方法实现图片的切割 比较其各自的效率
    * */
    * public
      class TestMIDlet extends MIDlet {  
    *

    *     public TestMIDlet() {  
    *         Display display = Display.getDisplay(this);  
    *         display.setCurrent(new ImagePart());  
    *     }  
    *

    *     protected
      void startApp() throws MIDletStateChangeException {  
    *

    *     }  
    *

    *     protected
      void destroyApp(boolean arg0) throws MIDletStateChangeException {  
    *

    *     }  
    *

    *     protected
      void pauseApp() {  
    *

    *     }  
    *

    *     class ImagePart extends Canvas {  
    *

    *         private Image img;  
    *

    *         public ImagePart() {  
    *             try {  
    *                 img = Image.createImage("/11.png");  
    *             } catch (IOException e) {  
    *                 e.printStackTrace();  
    *             }  
    *         }  
    *

    *         protected
      void paint(Graphics g) {  
    *             /** 把整幅需要切割的图片画出 供参考 */
    *             g.drawImage(img, getWidth() / 2, 0, Graphics.TOP  
    *                             | Graphics.HCENTER); // 上 水平
    *

    *             /** 第一种方法 */
    *             for (int i = 0; i < 6; i++) {  
    *                 g.drawRegion(img, 21 * i, 0, 21, 50, Sprite.TRANS_NONE,  
    *                         30 * (i + 1), 60, 0);  
    *             }  
    *             /** 第二种方法 */
    *             for (int i = 0; i < 6; i++) {  
    *                 g.setClip(30 * (i + 1), 120, 21, 50);  
    *                 g.drawImage(img, 30 * (i + 1) - 21 * i, 120, 0);  
    *             }  
    *             g.setClip(0, 0, getWidth(), getHeight());// 一定要把有这句话 设为全部可见
    *             /** 第三种方法 */
    *             Image image = null;  
    *             for (int i = 0; i < 6; i++) {  
    *                 image = Image.createImage(img, 21 * i, 0, 21, 50,  
    *                         Sprite.TRANS_NONE);  
    *                 g.drawImage(image, 30 * (i + 1), 180, 0);  
    *             }  
    *

    *         }  
    *     }  
    *

    * }  



注:11.png必须是126*50大小的图片
用wtk模拟器测得的数据如下:
最大值都是526800 字节
其中当前值:1,85420
                  2,85352
                  3,85742
再用s60模拟器测得数据如下:
Mem Usage 1,11571200 bytes
                   2,11550720 bytes
                   3,11558912 bytes
最后得到结论 虽然第二种方法比较磨叽一些 但是却赢得了效率 这在比较小的图片如本例中是相差很小的 几乎可以忽略不计,但是在遇到比较大的图片时候就要考虑到切割的效率问题了
阅读(1556) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~