这个函数是我以前在网上搜罗到的,且不谈效果,性能什么的。只觉得它非常好用。
用了很长时间,可惜不知道是谁。真要谢谢这位作者了。
这个函数使用了midp2.0的getRGB()函数,效率不错,基本上没什么可优化的了。
- publicstaticImageZoomImage(Imagesrc,intdesW,intdesH){
- ImagedesImg=null;
- intsrcW=src.getWidth();//原始图像宽
- intsrcH=src.getHeight();//原始图像高
- int[]srcBuf=newint[srcW*srcH];//原始图片像素信息缓存
- src.getRGB(srcBuf,0,srcW,0,0,srcW,srcH);
- //计算插值表
- int[]tabY=newint[desH];
- int[]tabX=newint[desW];
- intsb=0;
- intdb=0;
- inttems=0;
- inttemd=0;
- intdistance=srcH>desH?srcH:desH;
- for(inti=0;i<=distance;i++){/*垂直方向*/
- tabY[db]=sb;
- tems+=srcH;
- temd+=desH;
- if(tems>distance){
- tems-=distance;
- sb++;
- }
- if(temd>distance){
- temd-=distance;
- db++;
- }
- }
- sb=0;
- db=0;
- tems=0;
- temd=0;
- distance=srcW>desW?srcW:desW;
- for(inti=0;i<=distance;i++){/*水平方向*/
- tabX[db]=(short)sb;
- tems+=srcW;
- temd+=desW;
- if(tems>distance){
- tems-=distance;
- sb++;
- }
- if(temd>distance){
- temd-=distance;
- db++;
- }
- }
- //生成放大缩小后图形像素buf
- int[]desBuf=newint[desW*desH];
- intdx=0;
- intdy=0;
- intsy=0;
- intoldy=-1;
- for(inti=0;i<desH;i++){
- if(oldy==tabY[i]){
- System.arraycopy(desBuf,dy-desW,desBuf,dy,desW);
- }else{
- dx=0;
- for(intj=0;j<desW;j++){
- desBuf[dy+dx]=srcBuf[sy+tabX[j]];
- dx++;
- }
- sy+=(tabY[i]-oldy)*srcW;
- }
- oldy=tabY[i];
- dy+=desW;
- }
- //生成图片
- desImg=Image.createRGBImage(desBuf,desW,desH,false);
- returndesImg;
- }