当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

在运行时将大图分割为小图片数组[Java编程]

赞助商链接



  本文“在运行时将大图分割为小图片数组[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

本文介绍如安在程序运行时将一个较大的图片分割为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.LEFT|Graphics.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));
}
}
class ImageCanvas extends Canvas {
private Image img = null;
public ImageCanvas(Image _img) {
 this.img = _img;
}
public void paint(Graphics g) {
 int color = g.getColor();
 g.setColor(0xFFFFFF);
 g.fillRect(0, 0, getWidth(), getHeight());
 g.setColor(color);
 if (img != null) {
 // before split
 g.drawImage(img, 0, 0, Graphics.LEFT | Graphics.TOP);
 // after
 int distance = img.getHeight() + 6;
 Image[] sprites = ImageUtil.splitImage(img, 3, 4);
 if (sprites != null) {
  for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 4; j++) {
   g.drawImage(sprites[4 * i + j], j
    * sprites[4 * i + j].getWidth()+2*j, distance
    + i * sprites[4 * i + j].getHeight()+2*i,
    Graphics.LEFT | Graphics.TOP);
  }
  }
 }
 }
}
}

预备一个图片test.png,便可运行.我们倡议图片的高度应当和行数成正比,图片的宽度与列数成正比.为了显示出分割的效果,这里把小图片之间加了一点间距.


  以上是“在运行时将大图分割为小图片数组[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 在运行时将大图分割为小图片数组
  • <b>C++ Builder在运行时成立BDE别名</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .