在运行时将大图分割为小图片数组

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

本文介绍如何在程序运行时将一个较大的图片分割为Image数组。实现此功能最重要的就是使用Graphics的坐标变换和绘制图片的功能。也就是使用translate()和drawImage()方法。

我们设计一个ImageUtil类,如下所示:

/**

* Copyright_2006, eric zhan

* Created on 2006-6-8

*/

package com.j2medev.image;

import Javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.Image;

public class ImageUtil {

public static Image[] splitImage(Image img, int rows, int cols) {

if(img == null)

return null;

Image[] result = new Image[rows * cols];

int w = img.getWidth()/cols;

int h = img.getHeight()/rows;

for(int i = 0;i<result.length;i++){

result[i] = Image.createImage(w,h);

Graphics g = result[i].getGraphics();

g.translate((-i%cols)*w,(-i/cols)*h);

g.drawImage(img,0,0,Graphics.LEFTGraphics.TOP);

}

return result;

}

}

静态方法splitImage(Image img,int rows,int cols)把参数img指定的Image对象分割为rows行cols列的Image数组。这里我们把数组存储为一维数组,当然您也可以存储为二维数组。根据img的高度和宽度以及目标数组的行数和列数,可以计算出每个小图片的高度和宽度,并且每个图片的高度和宽度应该是相等的。Graphics的translate(int x,int y)方法可以将graphics上下文的原点变换到(x,y),这样随后的绘画动作都是以新的原点为准了。随后我们调用drawImage()就可以把img的部分内容绘画的新的Image中。循环结束后,把Image数组返回。

下面编写一个测试的MIDlet来看看效果,代码如下:

/**

* Copyright_2006, eric zhan

* Created on 2006-6-8

*/

package com.j2medev.image;

import java.io.IOException;

import javax.microedition.lcdui.Canvas;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Form;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.Image;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

public class ImageMIDlet extends MIDlet {

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

protected void pauseApp() {

// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {

// TODO Auto-generated method stub

Display display = Display.getDisplay(this);

Image img = null;

try {

img = Image.createImage("/test.png");

} catch (IOException ex) {

Form form = new Form("error");

form.append("error to load the img");

display.setCurrent(form);

return;

}

display.setCurrent(new ImageCanvas(img));

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航