Bitmap使用时候注意什么?
2018-03-06 10:23
218 查看
1. 使用decodeStream获取Bitmap
ImageView.setImageBitmap、ImageView.setImageResource、BitmapFactory.decodeResource: 通过Java层的createBitmap完成,消耗更多内存
BitmapFactory.decodeStream: JNI >> nativeDecodeAsset,更加节约内存[java] view plain copyInputStream is = getResources().openRawResource(R.drawable.pic);
Bitmap bitmap = BitmapFactory.decodeStream(is);
注:decodeStream方法得到的Bitmap长宽是其他方法的1/2,等于原图的长宽像素值。具体原因不清楚。2. Decode时使用BitmapFactory.Options参数
a)Options.inSampleSize, 成比例放缩[java] view plain copyBitmapFactory.Options ops = new BitmapFactory.Options();
ops.inSampleSize = 2; // 取样比例,得到的结果长宽是原图的1/2
Bitmap bitmap = BitmapFactory.decodeStream(is, null, ops);
b)Options.inJustDecodeBounds,只获取长宽,不获取图片[java] view plain copyBitmapFactory.Options ops = new BitmapFactory.Options();
ops.inJustDecodeBounds = true; // 只解码边界值(长宽)
Bitmap bitmap = BitmapFactory.decodeStream(is, null, ops); // 此处得到的Bitmap为null
int bmpWidth = ops.outWidth; // 原始图片的宽度
int bmpHeight = ops.outHeight; // 原始图片的高度
注:奇怪的是,只获取长宽的话,几种方法获得的大小都一样,等于decodeStream获取的长宽值,也是图片的原长宽值。
c)Options.inPreferredConfig,修改图片编码格式(默认是Bitmap.Config.ARGB_8888) 编码方式有:(ARGB分别代表透明度、红、绿、蓝)
Bitmap.Config ALPHA_8 占8位(具体情况不清楚)
Bitmap.Config ARGB_4444 占16位(ARGB各4位)
Bitmap.Config ARGB_8888 占32位(ARGB各8位)
Bitmap.Config RGB_565 占16位(R5位G6位B5位) d)其他[java] view plain copy/* 下面两个字段需要组合使用 */
options.inPurgeable = true;
options.inInputShareable = true;
3. 手动回收Bitmap[java] view plain copyif(!bitmap.isRecycled()) {
bitmap.recycle();
}
ImageView.setImageBitmap、ImageView.setImageResource、BitmapFactory.decodeResource: 通过Java层的createBitmap完成,消耗更多内存
BitmapFactory.decodeStream: JNI >> nativeDecodeAsset,更加节约内存[java] view plain copyInputStream is = getResources().openRawResource(R.drawable.pic);
Bitmap bitmap = BitmapFactory.decodeStream(is);
注:decodeStream方法得到的Bitmap长宽是其他方法的1/2,等于原图的长宽像素值。具体原因不清楚。2. Decode时使用BitmapFactory.Options参数
a)Options.inSampleSize, 成比例放缩[java] view plain copyBitmapFactory.Options ops = new BitmapFactory.Options();
ops.inSampleSize = 2; // 取样比例,得到的结果长宽是原图的1/2
Bitmap bitmap = BitmapFactory.decodeStream(is, null, ops);
b)Options.inJustDecodeBounds,只获取长宽,不获取图片[java] view plain copyBitmapFactory.Options ops = new BitmapFactory.Options();
ops.inJustDecodeBounds = true; // 只解码边界值(长宽)
Bitmap bitmap = BitmapFactory.decodeStream(is, null, ops); // 此处得到的Bitmap为null
int bmpWidth = ops.outWidth; // 原始图片的宽度
int bmpHeight = ops.outHeight; // 原始图片的高度
注:奇怪的是,只获取长宽的话,几种方法获得的大小都一样,等于decodeStream获取的长宽值,也是图片的原长宽值。
c)Options.inPreferredConfig,修改图片编码格式(默认是Bitmap.Config.ARGB_8888) 编码方式有:(ARGB分别代表透明度、红、绿、蓝)
Bitmap.Config ALPHA_8 占8位(具体情况不清楚)
Bitmap.Config ARGB_4444 占16位(ARGB各4位)
Bitmap.Config ARGB_8888 占32位(ARGB各8位)
Bitmap.Config RGB_565 占16位(R5位G6位B5位) d)其他[java] view plain copy/* 下面两个字段需要组合使用 */
options.inPurgeable = true;
options.inInputShareable = true;
3. 手动回收Bitmap[java] view plain copyif(!bitmap.isRecycled()) {
bitmap.recycle();
}
相关文章推荐
- Android 从具体实例分析Bitmap使用时候内存注意点
- 使用SVN时候我们应该注意些什么?
- BBOSS框架使用jquery方式传參到后台的时候,要注意的事项
- 什么时候应该使用OLE-DB,ADO 或ODBC
- 什么时候该使用前置声明?
- 什么时候应该使用 ==?什么时候应该使用 Equals?
- (经典)使用group by出现错误.要注意什么?
- JAVA equals Douible BigDecimal 使用时候的几个注意事项
- 什么时候应该使用Web Service
- 使用Com组件的时候,注意接口的释放
- mysql使用高版本登录低版本的时候注意的问题
- Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项
- Java学习疑点(5)--使用多线程的时候如何注意避免死锁发生?
- 下载文件时候注意事项 临时文件的使用
- 什么时候应该使用Web Service
- 重写Java 的equals和hashcode方法的时候应该注意什么
- Android -- 使用inBitmap要注意的地方
- nrf51822在使用Timer1和Timer2定时器的时候如何设置定时注意地方
- PHP相关系列 - 我们什么时候应该使用异常?
- 什么是“引用”?申明和使用“引用”要注意哪些问题?