SimpleImageTrans.java
上传用户:sygbg6
上传日期:2020-12-29
资源大小:4884k
文件大小:2k
源码类别:

游戏

开发平台:

Java

  1. package cn.com.imageanalyze.util;
  2. import javax.microedition.lcdui.Image;
  3. public class SimpleImageTrans {
  4. /**
  5.  * 线性插值算法,缩放图片
  6.  * @param src
  7.  * @param desW
  8.  * @param desH
  9.  * @return
  10.  */
  11. public static int[] trans(Image src,int desW,int desH){
  12. // 计算差值表
  13. int srcH = src.getHeight();
  14. int srcW = src.getWidth();
  15. int srcBuff[] = new int[srcH * srcW];
  16. src.getRGB(srcBuff, 0, srcW, 0, 0, srcW, srcH);
  17. int sb = 0;
  18.     int db = 0;
  19.     int tems = 0;
  20.     int temd = 0;
  21.     int[] tabx = new int[desW];
  22.     int[] taby = new int[desH]; 
  23.     int distance = srcH > desH ? srcH : desH;
  24.     for (int i = 0; i <= distance; i++) { /*垂直方向*/
  25.       taby[db] = (short) sb;
  26.       tems += srcH;
  27.       temd += desH;
  28.       if (tems > distance) {
  29.         tems -= distance;
  30.         sb++;
  31.       }
  32.       if (temd > distance) {
  33.         temd -= distance;
  34.         db++;
  35.       }
  36.     }
  37.     sb = 0;
  38.     db = 0;
  39.     tems = 0;
  40.     temd = 0;
  41.     distance = srcW > desW ? srcW : desW;
  42.     for (int i = 0; i <= distance; i++) { /*水平方向*/
  43.       tabx[db] = (short) sb;
  44.       tems += srcW;
  45.       temd += desW;
  46.       if (tems > distance) {
  47.         tems -= distance;
  48.         sb++;
  49.       }
  50.       if (temd > distance) {
  51.         temd -= distance;
  52.         db++;
  53.       }
  54.     }
  55. //   生成放大缩小后图形像素buf
  56.     int[] desBuff = new int[desW * desH];
  57.     int dx = 0;
  58.     int dy = 0;
  59.     int sx = 0;
  60.     int sy = 0;
  61.     int oldy = -1;
  62.     for (int i = 0; i < desH; i++) {
  63.       if (oldy == taby[i]) {
  64.         System.arraycopy(desBuff, dy - desW, desBuff, dy, desW);
  65.       } else {
  66.         dx = 0;
  67.         for (int j = 0; j < desW; j++) {
  68.           desBuff[dy + dx] = srcBuff[sy + tabx[j]];
  69.           dx++;
  70.         }
  71.         sy += (taby[i] - oldy) * srcW;
  72.       }
  73.       oldy = taby[i];
  74.       dy += desW;
  75.     }
  76. return desBuff;
  77. // return null;
  78. }
  79. }