Android 位图加载 采样 缓存设计 Bitmap
2015-01-20 13:15
495 查看
Bitmap一般可以成文一个图片工具类 ,进行制定大小的压缩。进行固定大小的压缩
Bitmap 可以通过BitmapDrawable来创建,也可以通过creatBitmap来创建,有好多钟方式
createBitmap(Bitmap source,int x,int y,int width,int height);//源位图钟挖取
createScaledBitmap(Bitmap src,int dstWidth,int dstHeight,boolean filter);//源位图进行缩放到这个大小
createBitmap(Bitmap source,int x,int y,int width,int height,Matrix m ,boolean filter);//创建新位图
decodeByteArray(byte[] data,int offset,int lenght);//将字节数字解析为Bitmap
decodeFIle(String pathName);//从文件名种获得
decodeResource(Resource res,int id);//从资源钟获得
decodeStream(InputStream is);//从InputStream中获得
//我们需要注意一点,我们事情做完的bitmap记得要回收内存
boolean isRecycled() and void recycle()最好是不在UI中显示的图就把他recycle掉
BitmapDrawable bitmapDrawable = (BitmapDrawable )iv.getDrawable();
if(bitmapDrawable.getBitmap().isRecycle()){
bitmapDrawable.getBitmap().recycle();
}
高效加载大位图,压缩
这是一套图片处理的机制,因为图片占用内存太大了 。
Bitmap的知识点 ,最典型的就是ImageView,这个会一直保存在UI。
因为图片是字节的形式存在的 可以从资源,文件,uri和字节流中取出文件。
ALPHA_8:每个像素占用1byte内存
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存
(默认)
RGB_565:每个像素占用2byte内存
获取到Bitmap
config是枚举类型 分为 ALPHA_8,ARGB_8888 一般就用ARGB_8888
加水印(涉及画布画笔知识点)
需要在原来的基础上先拷贝一份新的位图
其他类
BitmapDrawable 这是一个封装类,封装了一个Bitmap。通过getBitmap()可以重新得到Bitmap。但实际情况中都是直接当做Drawable去使用了。
也可以是ImageView的getDrawable()方法获取到这个资源。是Bitmap与Drawable转换的一个桥梁。
Bitmap 可以通过BitmapDrawable来创建,也可以通过creatBitmap来创建,有好多钟方式
createBitmap(Bitmap source,int x,int y,int width,int height);//源位图钟挖取
createScaledBitmap(Bitmap src,int dstWidth,int dstHeight,boolean filter);//源位图进行缩放到这个大小
createBitmap(Bitmap source,int x,int y,int width,int height,Matrix m ,boolean filter);//创建新位图
decodeByteArray(byte[] data,int offset,int lenght);//将字节数字解析为Bitmap
decodeFIle(String pathName);//从文件名种获得
decodeResource(Resource res,int id);//从资源钟获得
decodeStream(InputStream is);//从InputStream中获得
//我们需要注意一点,我们事情做完的bitmap记得要回收内存
boolean isRecycled() and void recycle()最好是不在UI中显示的图就把他recycle掉
BitmapDrawable bitmapDrawable = (BitmapDrawable )iv.getDrawable();
if(bitmapDrawable.getBitmap().isRecycle()){
bitmapDrawable.getBitmap().recycle();
}
高效加载大位图,压缩
这是一套图片处理的机制,因为图片占用内存太大了 。
Bitmap的知识点 ,最典型的就是ImageView,这个会一直保存在UI。
因为图片是字节的形式存在的 可以从资源,文件,uri和字节流中取出文件。
<pre name="code" class="java">//BitmapFactory设置参数 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; //如果设置为true,并不会把图像的数据完全解码,只有图片的基本信息,不会将图片数据读入内存 opt.inPreferredConfig=Bitmap.Config.RGB_565;//表示16位位图 565代表对应三原色占的位数 options.inSampleSize = 8; //设置decode时的缩放比例。 opt.inPurgeable=true;//设置图片可以被回收 当下载图片需要控制内存的时候用 opt.inInputShareable=true;//当下载图片需要控制内存的时候用 我也不知道干嘛用 options.outHeight;//图片的高度 options.outWidth;//图片的宽度 options.outMimeType;//图片的类型
ALPHA_8:每个像素占用1byte内存
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存
(默认)
RGB_565:每个像素占用2byte内存
获取到Bitmap
//如果options.inJustBounds为true,则获取到的bitmap只有基本信息,为false才会有图片,才能导出 Bitmap bitmap = BitmapFactory.decodeFile(pathName:String,opts:Options); //获取文件中的图片 Bitmap bitmap = BitmapFactory.decodeResource(res:Rescources,id:int,opts:Options);//一般的Rescources 直接getRescources()就好了 ,获取资源中的图片 Bitmap bitmap = BitmapFactory.decodeStream(in:InputStream); //从输入流转bitmap <pre name="code" class="java">Bitmap bitmap = BitmapFactory.decodeStream(in:InputStream,outPadding:Rect,opts:Options); //从输入流转bitmap,中间一个参数为形状iv.setImageBitmap(bitmap);
config是枚举类型 分为 ALPHA_8,ARGB_8888 一般就用ARGB_8888
加水印(涉及画布画笔知识点)
需要在原来的基础上先拷贝一份新的位图
Bitmap newBitmap = bitmap.copy(Bitmap.Config:config,isMutable:boolean);//true 位图是可以变化的 Canvas canvas = new Canvas(newBitmap);//一块画布以newBitmap为背景 Paint paint = new paint();//一支画笔 canvas.drawXXX(); //format 格式 鼓励用png 不鼓励用gif 可以用jpeg Bitmap.CompressFormat.PNG //quality 照片质量 0到100 压缩的大小 //stream 放到某个流中去 一般是FileOutputStream Boolean b = newBitmap.compress(format,quality,stream);//进行压缩处理 判断是否成功 return newBitmap;
其他类
BitmapDrawable 这是一个封装类,封装了一个Bitmap。通过getBitmap()可以重新得到Bitmap。但实际情况中都是直接当做Drawable去使用了。
也可以是ImageView的getDrawable()方法获取到这个资源。是Bitmap与Drawable转换的一个桥梁。
相关文章推荐
- Bitmap二次采样,Android中的缓存处理及异步加载图片类的封装
- Android Bitmap 全面解析(二)加载多张图片的缓存处理 ...
- Android Bitmap 全面解析(二)加载多张图片的缓存处理 ...
- Android Bitmap的加载与缓存
- Android Bitmap 全面解析(二)加载多张图片的缓存处理
- Bitmap加载大图优化之位图重采样与Bitmap缓存Lru算法分析
- Android Bitmap 全面解析(二)加载多张图片的缓存处理
- Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计
- [Android实例] Android Bitmap 全面解析(二)加载多张图片的缓存处理
- Android Bitmap 全面解析(二)加载多张图片的缓存处理 ...
- Android Bitmap 全面解析(二)加载多张图片的缓存处理 ...
- android: 缓存异步加载Bitmap
- android--(Bitmap处理较大的位图、缓存位图)
- Bitmap高效加载及Android缓存策略
- Android Bitmap高效加载与LruCache内存缓存
- 用心学Android之Bitmap缓存编,可为ListView等控件提供异步加载图片解决方案
- Android 二级图片缓存,图片优化,图片异步加载框架设计
- Android BitmapFactory图片压缩处理(大位图二次采样压缩处理)
- Android Bitmap 全面解析(二)加载多张图片的缓存处理
- Android Bitmap 全面解析(二)加载多张图片的缓存处理 ...