Android 将图片扩大缩放的类


Android项目为了能自适应不同的分辨率手机,有二种方法,一种是把各个分辨率的图放到资源里去,这样做使APK文件太大了,有时我们只需扩大缩放图来达到适应的目的。下面是我用J2ME的方法进行修改,适应Android的。希望对大家有用。


/*********
 * 图片扩大缩放类
 */
import android.graphics.Bitmap;

public final class ZoomImage {
 public static Bitmap getZoomImage(Bitmap src, int desW, int desH) {
   Bitmap desImg = null;
     int srcW = src.getWidth(); // 原始图像宽
     int srcH = src.getHeight(); // 原始图像高
     int[] srcBuf = new int[srcW * srcH]; // 原始图片像素信息缓存

     src.getPixels(srcBuf, 0, srcW, 0, 0, srcW, srcH);
  
     // 计算插值表
     int[] tabY = new int[desH];
     int[] tabX = new int[desW];

     int sb = 0;
     int db = 0;
     int tems = 0;
     int temd = 0;
     int distance = srcH > desH ? srcH : desH;
     for (int i = 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 (int i = 0; i <= distance; i++) { /* 水平方向 */
      tabX[db] = (short) sb;
      tems += srcW;
      temd += desW;
      if (tems > distance) {
       tems -= distance;
       sb++;
      }
      if (temd > distance) {
       temd -= distance;
       db++;
      }
     }

     // 生成放大缩小后图形像素
     int[] desBuf = new int[desW * desH];
     int dx = 0;
     int dy = 0;
     int sy = 0;
  
     int oldy = -1;
     for (int i = 0; i < desH; i++) {
      if (oldy == tabY[i]) {
       System.arraycopy(desBuf, dy - desW, desBuf, dy, desW);
      } else {
       dx = 0;
       for (int j = 0; j < desW; j++) {
        desBuf[dy + dx] = srcBuf[sy + tabX[j]];
        dx++;
       }
       sy += (tabY[i] - oldy) * srcW;
      }
      oldy = tabY[i];
      dy += desW;
     }

     // 生成图片
     desImg = Bitmap.createBitmap(desBuf, desW, desH, Bitmap.Config.ARGB_8888);


     return desImg;
    }
}

相关内容