* 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
最后得到结论 虽然第二种方法比较磨叽一些 但是却赢得了效率 这在比较小的图片如本例中是相差很小的 几乎可以忽略不计,但是在遇到比较大的图片时候就要考虑到切割的效率问题了