Android 位图加载 采样 缓存设计 Bitmap
来源:互联网 发布:手机数据网络自动打开 编辑:程序博客网 时间:2024/06/08 14:19
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);//将字节数字解析为BitmapdecodeFIle(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内存
//如果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 放到某个流中去 一般是FileOutputStreamBoolean b = newBitmap.compress(format,quality,stream);//进行压缩处理 判断是否成功 return newBitmap;
其他类
BitmapDrawable 这是一个封装类,封装了一个Bitmap。通过getBitmap()可以重新得到Bitmap。但实际情况中都是直接当做Drawable去使用了。
也可以是ImageView的getDrawable()方法获取到这个资源。是Bitmap与Drawable转换的一个桥梁。
0 0
- Android 位图加载 采样 缓存设计 Bitmap
- Bitmap加载大图优化之位图重采样与Bitmap缓存Lru算法分析
- Bitmap位图采样及LurCache缓存
- Bitmap二次采样,Android中的缓存处理及异步加载图片类的封装
- android--(Bitmap处理较大的位图、缓存位图)
- android: 缓存异步加载Bitmap
- Bitmap 二次采样三级缓存
- Android bitmap二次采样
- BitMap位图的设计
- android 位图bitmap
- Android bitmap位图旋转
- Android Bitmap 位图相关
- Android Bitmap位图
- Android 位图(二) Bitmap
- Android Bitmap的二次采样
- BitMap加载、压缩、缓存
- 大位图二次采样压缩解决Bitmap OOM
- Bitmap处理 之四缓存位图
- 9.png malformed,No marked region found along edge,Found along top edge 问题解决
- 为什么每个前端开发者都要理解页面的渲染?
- 修改Oracle用户密码有效期
- cocos2dx之瓦片地图
- 不要浪费时间去写所谓的完美代码
- Android 位图加载 采样 缓存设计 Bitmap
- 译文 日经春秋 20150120
- Android 生成keystore,两种方式 【包括Mac下制作】
- NSData,NSImage,NSDictionary,NSString,NSInteger,Float,NSURL 等等互相转换
- Linux网络状态工具ss命令使用详解
- memcached 安装
- 短信监控脚本
- 前端知识体系及修炼攻略
- ScrollView嵌套ListView的问题同样适用于gridview