一、相关概念

1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象
2、Canvas画布,绘图的目的区域,用于绘图
3、Bitmap位图,用于图的处理
4、Matrix矩阵

二、Bitmap

1、从资源中获取Bitmap

Java代码
  1. Resourcesres=getResources();
  2. Bitmapbmp=BitmapFactory.decodeResource(res,R.drawable.icon);

2、Bitmap → byte[]

Java代码
  1. publicbyte[]Bitmap2Bytes(Bitmapbm){
  2. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  3. bm.compress(Bitmap.CompressFormat.PNG,100,baos);
  4. returnbaos.toByteArray();
  5. }

3、byte[] → Bitmap

Java代码
  1. publicBitmapBytes2Bimap(byte[]b){
  2. if(b.length!=0){
  3. returnBitmapFactory.decodeByteArray(b,0,b.length);
  4. }else{
  5. returnnull;
  6. }
  7. }

4、Bitmap缩放

Java代码
  1. publicstaticBitmapzoomBitmap(Bitmapbitmap,intwidth,intheight){
  2. intw=bitmap.getWidth();
  3. inth=bitmap.getHeight();
  4. Matrixmatrix=newMatrix();
  5. floatscaleWidth=((float)width/w);
  6. floatscaleHeight=((float)height/h);
  7. matrix.postScale(scaleWidth,scaleHeight);
  8. Bitmapnewbmp=Bitmap.createBitmap(bitmap,0,0,w,h,matrix,true);
  9. returnnewbmp;
  10. }

5、将Drawable转化为Bitmap

Java代码
  1. publicstaticBitmapdrawableToBitmap(Drawabledrawable){
  2. //取drawable的长宽
  3. intw=drawable.getIntrinsicWidth();
  4. inth=drawable.getIntrinsicHeight();
  5. //取drawable的颜色格式
  6. Bitmap.Configconfig=drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
  7. :Bitmap.Config.RGB_565;
  8. //建立对应bitmap
  9. Bitmapbitmap=Bitmap.createBitmap(w,h,config);
  10. //建立对应bitmap的画布
  11. Canvascanvas=newCanvas(bitmap);
  12. drawable.setBounds(0,0,w,h);
  13. //把drawable内容画到画布中
  14. drawable.draw(canvas);
  15. returnbitmap;
  16. }

6、获得圆角图片

Java代码
  1. publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap,floatroundPx){
  2. intw=bitmap.getWidth();
  3. inth=bitmap.getHeight();
  4. Bitmapoutput=Bitmap.createBitmap(w,h,Config.ARGB_8888);
  5. Canvascanvas=newCanvas(output);
  6. finalintcolor=0xff424242;
  7. finalPaintpaint=newPaint();
  8. finalRectrect=newRect(0,0,w,h);
  9. finalRectFrectF=newRectF(rect);
  10. paint.setAntiAlias(true);
  11. canvas.drawARGB(0,0,0,0);
  12. paint.setColor(color);
  13. canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
  14. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  15. canvas.drawBitmap(bitmap,rect,rect,paint);
  16. returnoutput;
  17. }

7、获得带倒影的图片

Java代码
  1. publicstaticBitmapcreateReflectionImageWithOrigin(Bitmapbitmap){
  2. finalintreflectionGap=4;
  3. intw=bitmap.getWidth();
  4. inth=bitmap.getHeight();
  5. Matrixmatrix=newMatrix();
  6. matrix.preScale(1,-1);
  7. BitmapreflectionImage=Bitmap.createBitmap(bitmap,0,h/2,w,
  8. h/2,matrix,false);
  9. BitmapbitmapWithReflection=Bitmap.createBitmap(w,(h+h/2),
  10. Config.ARGB_8888);
  11. Canvascanvas=newCanvas(bitmapWithReflection);
  12. canvas.drawBitmap(bitmap,0,0,null);
  13. PaintdeafalutPaint=newPaint();
  14. canvas.drawRect(0,h,w,h+reflectionGap,deafalutPaint);
  15. canvas.drawBitmap(reflectionImage,0,h+reflectionGap,null);
  16. Paintpaint=newPaint();
  17. LinearGradientshader=newLinearGradient(0,bitmap.getHeight(),0,
  18. bitmapWithReflection.getHeight()+reflectionGap,0x70ffffff,
  19. 0x00ffffff,TileMode.CLAMP);
  20. paint.setShader(shader);
  21. //SettheTransfermodetobeporterduffanddestinationin
  22. paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
  23. //Drawarectangleusingthepaintwithourlineargradient
  24. canvas.drawRect(0,h,w,bitmapWithReflection.getHeight()
  25. +reflectionGap,paint);
  26. returnbitmapWithReflection;
  27. }

三、Drawable

1、Bitmap转换成Drawable

Java代码
  1. Bitmapbm=xxx;//xxx根据你的情况获取
  2. BitmapDrawablebd=newBitmapDrawable(getResource(),bm);
  3. 因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

2、Drawable缩放

Java代码
  1. publicstaticDrawablezoomDrawable(Drawabledrawable,intw,inth){
  2. intwidth=drawable.getIntrinsicWidth();
  3. intheight=drawable.getIntrinsicHeight();
  4. //drawable转换成bitmap
  5. Bitmapoldbmp=drawableToBitmap(drawable);
  6. //创建操作图片用的Matrix对象
  7. Matrixmatrix=newMatrix();
  8. //计算缩放比例
  9. floatsx=((float)w/width);
  10. floatsy=((float)h/height);
  11. //设置缩放比例
  12. matrix.postScale(sx,sy);
  13. //建立新的bitmap,其内容是对原bitmap的缩放后的图
  14. Bitmapnewbmp=Bitmap.createBitmap(oldbmp,0,0,width,height,
  15. matrix,true);
  16. returnnewBitmapDrawable(newbmp);
  17. }

Android中Bitmap和Drawable 总结相关推荐

  1. Android中Bitmap和Drawable

    一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...

  2. Android中Bitmap和Drawable详解

    一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...

  3. Android中Bitmap的分析与使用

    下面总结一下Bitmap的分析与使用 Bitmap的创建 创建Bitmap的时候,Java不提供new Bitmap()的形式去创建,而是通过BitmapFactory中的静态方法去创建,如:Bitm ...

  4. 你都知道么?Android中21种drawable标签大全

    前言 我们在drawable目录下可以创建很多自定义的资源,其中用的最多的应该就是selector和shape.目前在Android中有21种drawable标签,了解和利用这些标签对我们的开发有很大 ...

  5. Android中应用程序drawable图片资源占用内存的统计

    在实际项目中,我们可能需要统计我们应用程序中drawable下的图片或文本在都载入的情况,最多会占用多少内存 ,以对其做定性分析. 关于Android中图片占用内存的计算,请参照<Android ...

  6. Android 中的各种 Drawable 你都知道了吗?

    文章目录 Drawable BitmapDrawable NinePatchDrawable ShapeDrawable LayerDrawable StateListDrawable LevelLi ...

  7. android中bitmap压缩的几种方法详解

    Android图片压缩(质量压缩和尺寸压缩) 在做项目中遇到一个头疼的问题,读取本地图片时,由于图片太大,奔溃,对于我这种456M内存的破手机哪里受得了几M的照片 我要总结的有这么几点: 1.尺寸压缩 ...

  8. Android中Bitmap缓存池

    http://mobile.51cto.com/android-386446.htm 本文介绍了如何使用缓存来提高UI的载入输入和滑动的流畅性.使用内存缓存.使用磁盘缓存.处理配置改变事件等方法将会有 ...

  9. android中layout、drawable及styles的xml文件加载探索

    最近搞一个SDK项目,既然提供给用户那么就不能太复杂.而android如果不用xml就会很复杂,比如布局,那么怎么办? 关于布局别人提供了一个方法,xml解析.具体做法将xml文件以数据文件的形式放在 ...

最新文章

  1. 基于 OpenCV 的图像阴影去除
  2. css属性cusor
  3. was更换java版本,WAS如何更换JDK
  4. 从零开始入门 K8s:深入剖析 Linux 容器
  5. oracle io lost,磁盘IO故障
  6. java 防止用户重复登录_JAVA 如何避免用户的重复登录
  7. Android四大组件---Activity
  8. 一稿过的Banner模板素材!做电商的你一定需要
  9. 让mysql timeStamp类型支持默认值0000-00-00 00:00:00
  10. mysql text 性能_MySQL - text 性能优化--记录一
  11. 用VMware克隆CentOS 6.4后HWaddr和UUID的设置
  12. Android加载服务器的静态图片文件
  13. Markdown部分语法使用
  14. 大菠萝已经完全变味了
  15. (5)完整的Django框架学习之自定义过滤器及标签
  16. 【计算机网络】第六话·数据的传输方式(上)
  17. 如何看pg数据库版本号_pg版本是什么-和pg版本相关的问题-阿里云开发者社区
  18. php短网址程序,博天短网址生成程序 PHP源码
  19. 内网渗透测试 MSF搭建socks代理
  20. APPLE Bonjour服务导致公司网络核心Cisco 6509崩溃的案例

热门文章

  1. 0 full gc时cpu idle_结合GC日志讲讲CMS垃圾收集器
  2. android进程守护 失效,保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 1...
  3. python技术分享_分享几个python的使用技巧
  4. HTML示例07---图像与超链接
  5. 集成unittest与html测试报告
  6. 自动化用例设计原则+web自动化框架
  7. 自学了三个月的软件测试,从小白到自动化测试工程师,我是如何从零拿到大厂offer的
  8. 面试必考题:基本95%的面试都会被问到的?
  9. 通过 YAPI + Python Flask 实现接口自动化测试
  10. 测试开发新手:从0到1开展性能测试必备的性能测试要点!