|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
那这个对象有什么意义?现在很多用javabean的人就不能保证对象有完整的意义,不成熟的使用模式等导致代码疯狂增长,调试维护的时间要得多得多。在说性能之前,先说说你这个比较的来历。据说微软为了证明。net网页编程比java好。
本文先容怎样在程序运转时将一个较年夜的图片支解为Image数组。完成此功效最主要的就是利用Graphics的坐标变更和绘制图片的功效。也就是利用translate()和drawImage()办法。
我们计划一个ImageUtil类,以下所示:
/**
*Copyright_2006,ericzhan
*Createdon2006-6-8
*/
packagecom.j2medev.image;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
publicclassImageUtil{
publicstaticImage[]splitImage(Imageimg,introws,intcols){
if(img==null)
returnnull;
Image[]result=newImage[rows*cols];
intw=img.getWidth()/cols;
inth=img.getHeight()/rows;
for(inti=0;i<result.length;i++){
result=Image.createImage(w,h);
Graphicsg=result.getGraphics();
g.translate((-i%cols)*w,(-i/cols)*h);
g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);
}
returnresult;
}
}
静态办法splitImage(Imageimg,introws,intcols)把参数img指定的Image对象支解为rows行cols列的Image数组。这里我们把数组存储为一维数组,固然您也能够存储为二维数组。依据img的高度和宽度和方针数组的行数和列数,能够盘算出每一个小图片的高度和宽度,而且每一个图片的高度和宽度应当是相称的。Graphics的translate(intx,inty)办法能够将graphics高低文的原点变更到(x,y),如许随后的绘画举措都是以新的原点为准了。随后我们挪用drawImage()就能够把img的部份内容绘画的新的Image中。轮回停止后,把Image数组前往。
上面编写一个测试的MIDlet来看看效果,代码以下:
/**
*Copyright_2006,ericzhan
*Createdon2006-6-8
*/
packagecom.j2medev.image;
importjava.io.IOException;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Display;
importjavax.microedition.lcdui.Form;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
publicclassImageMIDletextendsMIDlet{
protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{
}
protectedvoidpauseApp(){
//TODOAuto-generatedmethodstub
}
protectedvoidstartApp()throwsMIDletStateChangeException{
//TODOAuto-generatedmethodstub
Displaydisplay=Display.getDisplay(this);
Imageimg=null;
try{
img=Image.createImage("/test.png");
}catch(IOExceptionex){
Formform=newForm("error");
form.append("errortoloadtheimg");
display.setCurrent(form);
return;
}
display.setCurrent(newImageCanvas(img));
}
}
classImageCanvasextendsCanvas{
privateImageimg=null;
publicImageCanvas(Image_img){
this.img=_img;
}
publicvoidpaint(Graphicsg){
intcolor=g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
if(img!=null){
//beforesplit
g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);
//after
intdistance=img.getHeight()+6;
Image[]sprites=ImageUtil.splitImage(img,3,4);
if(sprites!=null){
for(inti=0;i<3;i++){
for(intj=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,便可运转。我们倡议图片的高度应当和行数成反比,图片的宽度与列数成反比。为了显现出支解的效果,这里把小图片之间加了一点间距。
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。 |
|