用三种方法实现了切割同一张图片 并且达到了同一种效果 现比较其各自的效率
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 [email protected]: * @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
最后得到结论 虽然第二种方法比较磨叽一些 但是却赢得了效率 这在比较小的图片如本例中是相差很小的 几乎可以忽略不计,但是在遇到比较大的图片时候就要考虑到切割的效率问题了