解决问题,缩小图片文件分辨率

 

   今天一直在搞这个问题,在网上也搜索了很多的东西发现,没有什么用,最后发现可能能用的

代码如下:

 

import android.graphics.Bitmap;
import android.graphics.Matrix;

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);
    // Bitmap target_bit=Bitmap.createBitmap(desImg, 0, 0, desImg.getWidth(), desImg.getHeight(), rot, true);

      return desImg;
     }
 }

    但测试后,发现,这个文件,确实是能够实现缩小,但可能是由于插边做得不好,所以,里面的文字效果特别地差,不能达到应该达到的效果,故弃之。

   这里解决了问题,特别要感谢繁星皓月 友友 

  http://home.51cto.com/index.php?s=/space/1723922,是他提供的一个API方法,来实现,Bitmap.createScaledBitmap(mBitmap,screen_width,screen_height,true);

这个API方法,真的好简单,而且缩小之后,文字不会出现变形的状态,效果非常好,值得称赞。

具体办法是:

1。InputStream得到图片01
2。由图片01创建图片02
使用createBitmap(Bitmap source, int x, int y, int width, int height) 创建
3。输出02

简单代码如下:Bitmap bitmap = getBitmap();
//
Bitmap bitmap02;
bitmap02 = Bitmap.createScaledBitmap(bitmap,20,20,true);
// 使用矩阵绘制图片
canvas.drawBitmap(bitmap,0,0,paint);
canvas.drawBitmap(bitmap02, 130,130, paint); 这个是一个简单的例子。

如有不明白,可以发问。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值