美文网首页
Android Bitmap

Android Bitmap

作者: 全球顶尖伪极客 | 来源:发表于2019-07-09 19:06 被阅读0次

BitmapFactory提供了四类方法:decodeFile、decodeResource、decodeStream、decodeByteArray

1、从文件中读取

try {
    FileInputStream in = new FileInputStream("/sdcard/Download/xx.png");
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

Bitmap bitmap = BitmapFactory.decodeStream(in);
 // 间接调用 BitmapFactory.decodeStream
Bitmap bm = BitmapFactory.decodeFile(sd_path);

2、从资源中读取

// 间接调用 BitmapFactory.decodeStream
Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.xxx); 

  1. 从字节序列里读取
    // InputStream转换成byte[]
    Bitmap bm = BitmapFactory.decodeByteArray(myByte,0,myByte.length);

巨图加载:BitmapRegionDecoder,可以按照区域进行加载
高效加载:核心其实也很简单,主要是采样压缩、缓存策略、异步加载等

  • 采样压缩
BitmapFactory.Options options = new BitmapFactory.Options();  
//inJustDecodeBounds为true,不返回bitmap,只返回这个bitmap的尺寸  
options.inJustDecodeBounds = true; 
BitmapFactory.decodeResource(getResources(), images[position], options);  
//利用返回的原图片的宽高,我们就可以计算出缩放比inSampleSize(只能是2的整数次幂)
options.inSampleSize = caluelateInSampleSize(options, reqWidth, reqHeight);//使用RGB_565减少图片大小  
options.inPreferredConfig = Bitmap.Config.RGB_565;  
//释放内存,共享引用(21版本后失效)  
options.inPurgeable = true;  
options.inInputShareable = true;  
             
//inJustDecodeBounds为false,返回bitmap  
options.inJustDecodeBounds = false;  
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), images[position], options);

相关文章

网友评论

      本文标题:Android Bitmap

      本文链接:https://www.haomeiwen.com/subject/clyfkctx.html