Android Drawable、Bitmap、byte、灰度 转换
在Android开发中,图片资源的处理是常见的需求之一,涉及到多种数据类型之间的转换,包括`Drawable`、`Bitmap`、`byte[]`等。本文将详细介绍这些类型之间的转换方法,以及如何实现灰度图像的转换。 ### 1. `Drawable`到`Bitmap`的转换 在Android中,`Drawable`是一个抽象类,用于描述可绘制对象,如矢量图形或位图。将其转换为`Bitmap`可以便于进行进一步的图像处理或显示。以下是一种将`Drawable`转换为`Bitmap`的方法: ```java public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; } ``` ### 2. 从资源中获取`Bitmap` 从应用的资源文件中直接加载`Bitmap`是常见的操作。这可以通过`BitmapFactory`的静态方法`decodeResource()`来完成: ```java Resources res = getResources(); Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.pic); ``` ### 3. `Bitmap`到`byte[]`的转换 将`Bitmap`转换为`byte[]`通常用于在网络上传输图像或者存储到文件系统中。以下是如何将`Bitmap`转换为字节数组: ```java private byte[] Bitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); } ``` ### 4. `byte[]`到`Bitmap`的转换 当接收到字节数组后,我们可能需要将其转换回`Bitmap`以便于显示或进一步处理: ```java private Bitmap Bytes2Bimap(byte[] b) { if (b.length != 0) { return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; } } ``` ### 5. 实现灰度图像转换 灰度图像转换是图像处理中的一个常见需求,可以通过对像素的RGB值进行加权平均,然后用平均值替换RGB三个通道的值,来实现灰度化效果。以下是一个简单的实现: ```java public Bitmap toGrayscale(Bitmap bmpOriginal) { int width, height; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); Canvas c = new Canvas(bmpGrayscale); Paint paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.setSaturation(0); ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); paint.setColorFilter(f); c.drawBitmap(bmpOriginal, 0, 0, paint); return bmpGrayscale; } ``` 通过以上方法,开发者可以灵活地在Android应用中处理各种图像资源,实现不同场景下的需求,如图片缩放、格式转换、灰度化等。这对于提升应用的性能和用户体验具有重要意义。



















- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- java毕业设计,航空销售管理系统
- java毕业设计,招生宣传管理系统
- 一个图书管理系统,java+swing
- java毕业设计,基于java敬老院管理系统
- java毕业设计,洗衣店订单管理系统
- 基于 Java 技术的医院病房舍管理系统设计与实现 基于 Java 平台的智能化病房舍病房综合管理系统开发 基于 Java 的智能化病房病房信息管理系统的设计 基于 Java 技术的智能化病房病房智能
- 网络文化对大学生思想品德的影响之社会实践.ppt
- 网络信息与国家安全.ppt
- 计算机的数据与编码.ppt
- 互联网+”大学生创新创业大赛项目计划书模版.doc
- 项目管理及六底盘损伤管理知识分析评估.pptx
- 日本政府投资项目管理体制研究.docx
- 网上在线购物系统项目管理.docx
- 通讯自动化培训—通讯自动化系统基础培训.pptx
- 网络营销你准备好了吗新生演讲.pptx
- 多目标优化实例和matlab程序.doc


