blackberry黑莓的图片缩放

本文介绍了一种用于调整图片大小的算法实现,通过计算插值表并生成新的像素缓冲区来实现图片的放大或缩小。

今天群里有高人帖的,赶紧存了,未测试过。 

 

public static Bitmap ZoomImage(Image src, int desW, int desH) {
         int srcW = src.getWidth(); // 原始图像宽
         int srcH = src.getHeight(); // 原始图像高
         int[] srcBuf = new int[srcW * srcH]; // 原始图片像素信息缓存
         src.getRGB(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++;
             }
         }
         // 生成放大缩小后图形像素buf
         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 = Image.createRGBImage(desBuf, desW, desH, true);
         //return desImg;
         Bitmap bmp = new Bitmap(desW, desH);
   bmp.setARGB(desBuf, 0, desW, 0, 0, desW, desH);
   return bmp;
     }

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值