您的位置:首页 > 移动开发 > Android开发

总结下Android中Bitmap的应用方式

2016-07-03 02:08 405 查看
同一张图片,放在不同目录下,会生成不同大小的Bitmap

Bitmap的长度和宽度越大,占用的内存就越大

图片在硬盘上占用的大小,与在内存中占用的大小完全不一样

存放在硬盘上的图片文件,会根据各自的压缩规则进行压缩,比如Jpeg这种有损压缩的图片格式,最常使用可变字长编码的哈弗曼编码,会使用哈弗曼树,也就是最优二叉树,根据某些数据出现的频率对数据段编码,从而减少占用的硬盘大小


Bitmap的一般用法:

1. 使用
inSampleSize

这个方法主要用在图片资源本身较大,或者适当地采样并不会影响视觉效果的条件下,这时候我们输出地目标可能相对较小,对图片分辨率、大小要求不是非常的严格。

BitmapFactory.Options options = new Options();
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId, options);


2.使用矩阵

小图要放大进行使用的话就用矩阵。

Matrix matrix = new Matrix();
matrix.preScale(2, 2, 0f, 0f);
//如果使用直接替换矩阵的话,在Nexus6 5.1.1上必须关闭硬件加速
canvas.concat(matrix);
canvas.drawBitmap(bitmap, 0,0, paint);
这样,绘制出来的
bb38
图就是放大以后的效果了,不过占用的内存却仍然是我们采样出来的大小。

Matrix matrix = new Matrix();
matrix.postScale(2, 2, 0, 0);
imageView.setImageMatrix(matrix);
imageView.setScaleType(ScaleType.MATRIX);
imageView.setImageBitmap(bitmap);


BitMap获取图片大小的代码:

在Android API(12)之前的版本和后来的版本是不一样:

public long getBitmapsize(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
return bitmap.getByteCount();
}
// Pre HC-MR1
return bitmap.getRowBytes() * bitmap.getHeight();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: