Bitmap高效加载

Bitmap加载方式

  1. BitmapFactory.decodeByteArray() 字节数组
  2. BitmapFactory.decodeFile() 文件路径
  3. BitmapFactory.decodeResource() 资源ID
  4. BitmapFactory.decodeStream() 流

如何高效加载Bitmap

  • 理论依据:BitmapFactory.Options这个类为我们高效加载提供了可能。
  • BitmapFactory.Options有以下几个重要属性:
  1. inJustDecodeBounds
  2. outWidth&outHeight
  3. inSampleSize

代码

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class BitmapUtil {
    public static Bitmap ratio(String filePath,int pixelW,int pixelH){
        BitmapFactory.Options newOptions = new BitmapFactory.Options();
        newOptions.inJustDecodeBounds = true;
        newOptions.inPreferredConfig = Bitmap.Config.RGB_565;
        //预加载
        BitmapFactory.decodeFile(filePath,newOptions);
        int originalW = newOptions.outWidth;
        int originalH = newOptions.outHeight;
        newOptions.inSampleSize = getSimpleSize(originalW,
                originalH,pixelW,pixelH);
        newOptions.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(filePath,newOptions);
    }

    private static int getSimpleSize(int originalW, int originalH, int pixelW, int pixelH) {
        int simpleSize = 1;
        if (originalW > pixelW || originalH > pixelH) {
            //计算出实际宽高和目标宽高的比率
            final int widthRatio = Math.round((float) originalW / (float) pixelW);
            final int heightRatio = Math.round((float) originalH / (float) pixelH);
            /*选择宽和高中最小的比率作为inSampleSize的值,这样可以保证最终图片的宽和高
            一定都会大于等于目标的宽和高。*/
            simpleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }
        return simpleSize;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容