Android中Bitmap和Drawable

西电微机系统课程设计步进电机开环控制系统 ** 微机系统与应用课程设计 课题二 步进电机开环控制系统设计** 一、程设计目的 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。 加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。 搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。 二、课程设计的内容 手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50... 阅读详情
Android中Bitmap和Drawable           

一、相关概念

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

二、Bitmap

1、从资源中获取Bitmap
Java代码

Resources res = getResources();  

Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);  

		Resources res = getResources();
		Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);

 

2、Bitmap → byte[]
Java代码

public byte[] Bitmap2Bytes(Bitmap bm) {  

  ByteArrayOutputStream baos = new ByteArrayOutputStream();  

    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  

    return baos.toByteArray();  

}  

	public byte[] Bitmap2Bytes(Bitmap bm) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
		return baos.toByteArray();
	}
 3、byte[] → Bitmap
 public Bitmap Bytes2Bimap(byte[] b) {
  if (b.length != 0) {
   return BitmapFactory.decodeByteArray(b, 0, b.length);
  } else {
   return null;
  }
 }
	public Bitmap Bytes2Bimap(byte[] b) {
		if (b.length != 0) {
			return BitmapFactory.decodeByteArray(b, 0, b.length);
		} else {
			return null;
		}
	}
4、Bitmap缩放

public static Bitmap drawableToBitmap(Drawable drawable) {
  // 取 drawable 的长宽
  int w = drawable.getIntrinsicWidth();
  int h = drawable.getIntrinsicHeight();

  // 取 drawable 的颜色格式
  Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
    : Bitmap.Config.RGB_565;
  // 建立对应 bitmap
  Bitmap bitmap = Bitmap.createBitmap(w, h, config);
  // 建立对应 bitmap 的画布
  Canvas canvas = new Canvas(bitmap);
  drawable.setBounds(0, 0, w, h);
  // 把 drawable 内容画到画布中
  drawable.draw(canvas);
  return bitmap;
 }

	public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {
		int w = bitmap.getWidth();
		int h = bitmap.getHeight();
		Matrix matrix = new Matrix();
		float scaleWidth = ((float) width / w);
		float scaleHeight = ((float) height / h);
		matrix.postScale(scaleWidth, scaleHeight);
		Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
		return newbmp;
	}
  5、将Drawable转化为Bitmap
Java代码

 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
  int w = bitmap.getWidth();
  int h = bitmap.getHeight();
  Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
  Canvas canvas = new Canvas(output);
  final int color = 0xff424242;
  final Paint paint = new Paint();
  final Rect rect = new Rect(0, 0, w, h);
  final RectF rectF = new RectF(rect);
  paint.setAntiAlias(true);
  canvas.drawARGB(0, 0, 0, 0);
  paint.setColor(color);
  canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
  paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  canvas.drawBitmap(bitmap, rect, rect, paint);

  return output;
 }

 

 

public static Bitmap drawableToBitmap(Drawable drawable) {
		// 取 drawable 的长宽
		int w = drawable.getIntrinsicWidth();
		int h = drawable.getIntrinsicHeight();

		// 取 drawable 的颜色格式
		Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
				: Bitmap.Config.RGB_565;
		// 建立对应 bitmap
		Bitmap bitmap = Bitmap.createBitmap(w, h, config);
		// 建立对应 bitmap 的画布
		Canvas canvas = new Canvas(bitmap);
		drawable.setBounds(0, 0, w, h);
		// 把 drawable 内容画到画布中
		drawable.draw(canvas);
		return bitmap;
	}
6、获得圆角图片 
Java代码
  1. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {  
  2.     int w = bitmap.getWidth();  
  3.     int h = bitmap.getHeight();  
  4.     Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);  
  5.     Canvas canvas = new Canvas(output);  
  6.     final int color = 0xff424242;  
  7.     final Paint paint = new Paint();  
  8.     final Rect rect = new Rect(0, 0, w, h);  
  9.     final RectF rectF = new RectF(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(new PorterDuffXfermode(Mode.SRC_IN));  
  15.     canvas.drawBitmap(bitmap, rect, rect, paint);  
  16.   
  17.     return output;  
  18. }  
	public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
		int w = bitmap.getWidth();
		int h = bitmap.getHeight();
		Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
		Canvas canvas = new Canvas(output);
		final int color = 0xff424242;
		final Paint paint = new Paint();
		final Rect rect = new Rect(0, 0, w, h);
		final RectF rectF = new RectF(rect);
		paint.setAntiAlias(true);
		canvas.drawARGB(0, 0, 0, 0);
		paint.setColor(color);
		canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
		paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
		canvas.drawBitmap(bitmap, rect, rect, paint);

		return output;
	}
 7、获得带倒影的图片
Java代码

 public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
  final int reflectionGap = 4;
  int w = bitmap.getWidth();
  int h = bitmap.getHeight();

  Matrix matrix = new Matrix();
  matrix.preScale(1, -1);

  Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, h / 2, w,
    h / 2, matrix, false);

  Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2),
    Config.ARGB_8888);

  Canvas canvas = new Canvas(bitmapWithReflection);
  canvas.drawBitmap(bitmap, 0, 0, null);
  Paint deafalutPaint = new Paint();
  canvas.drawRect(0, h, w, h + reflectionGap, deafalutPaint);

  canvas.drawBitmap(reflectionImage, 0, h + reflectionGap, null);

  Paint paint = new Paint();
  LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
    bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,
    0x00ffffff, TileMode.CLAMP);
  paint.setShader(shader);
  // Set the Transfer mode to be porter duff and destination in
  paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
  // Draw a rectangle using the paint with our linear gradient
  canvas.drawRect(0, h, w, bitmapWithReflection.getHeight()
    + reflectionGap, paint);

  return bitmapWithReflection;
 }

	public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
		final int reflectionGap = 4;
		int w = bitmap.getWidth();
		int h = bitmap.getHeight();

		Matrix matrix = new Matrix();
		matrix.preScale(1, -1);

		Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, h / 2, w,
				h / 2, matrix, false);

		Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2),
				Config.ARGB_8888);

		Canvas canvas = new Canvas(bitmapWithReflection);
		canvas.drawBitmap(bitmap, 0, 0, null);
		Paint deafalutPaint = new Paint();
		canvas.drawRect(0, h, w, h + reflectionGap, deafalutPaint);

		canvas.drawBitmap(reflectionImage, 0, h + reflectionGap, null);

		Paint paint = new Paint();
		LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
				bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,
				0x00ffffff, TileMode.CLAMP);
		paint.setShader(shader);
		// Set the Transfer mode to be porter duff and destination in
		paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
		// Draw a rectangle using the paint with our linear gradient
		canvas.drawRect(0, h, w, bitmapWithReflection.getHeight()
				+ reflectionGap, paint);

		return bitmapWithReflection;
	}

 三、Drawable

1、Bitmap转换成Drawable
Java代码:
Bitmap bm=xxx; //xxx根据你的情况获取
BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。  
Bitmap bm=xxx; //xxx根据你的情况获取
BitmapDrawable bd= new BitmapDrawable(getResource(), bm); 
因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
2、Drawable缩放
 public static Drawable zoomDrawable(Drawable drawable, int w, int h) {
  int width = drawable.getIntrinsicWidth();
  int height = drawable.getIntrinsicHeight();
  // drawable转换成bitmap
  Bitmap oldbmp = drawableToBitmap(drawable);
  // 创建操作图片用的Matrix对象
  Matrix matrix = new Matrix();
  // 计算缩放比例
  float sx = ((float) w / width);
  float sy = ((float) h / height);
  // 设置缩放比例
  matrix.postScale(sx, sy);
  // 建立新的bitmap,其内容是对原bitmap的缩放后的图
  Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,
    matrix, true);
  return new BitmapDrawable(newbmp);
 }
 
 

原文链接:http://dyh7077063.iteye.com/blog/970672

 

/**
     * Drawable 转 bitmap
     * @param drawable
     * @return
     */ 
    public static Bitmap drawable2Bitmap(Drawable drawable){ 
        if(drawable instanceof BitmapDrawable){ 
            return ((BitmapDrawable)drawable).getBitmap() ; 
        }else if(drawable instanceof NinePatchDrawable){ 
            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; 
        }else{ 
            return null ; 
        } 
    } 

保姆级教程:用Unity为麒麟系统打包Linux应用(含路径权限全攻略) 本文提供了一份详细的Unity跨平台开发指南,重点介绍如何在麒麟系统上打包和部署Linux应用。从开发环境配置、路径权限处理到性能优化和常见问题解决,全面解析了Unity项目在国产操作系统上的适配流程,帮助开发者高效完成跨平台应用开发。 阅读详情

相关推荐

音频分割:长语音音频 分割为 短语音音频 - python 实现

音频分割:长语音音频 分割为 短语音音频 - python 实现

DATABALL 的博客 1207

Android中图片Bitmap的缩放

一、什么是Android中的Bitmap Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。 二、Bitmap的缩放基本操作 在Android开发中,经常会遇到图片的操作问题,由于Android屏幕尺寸繁多,最经常的是图片的缩放问题。下面为一段Android操作的基本代码     

ytuglt的博客 1147

AI视频生成本地搭建图文详细过程

在自己的电脑上搭建一个AI,主要用于通过自己输入的关键字来自动生成视频文案,把视频文案自动生成视频,再自动给视频配音配字幕。

张小三的博客 4692

Android中Bitmap和Drawable 总结

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

lili1985516的专栏 573

Vivado安装教程:多版本共存的配置技巧

详解Vivado安装教程中的多版本共存配置技巧,帮助用户在同一系统中管理不同版本的Vivado开发环境,提升开发效率与兼容性,适用于需要切换版本的FPGA开发者。

weixin_35257663的博客 1775

飞书+扣子+DeepSeek三件套:5分钟搞定公众号文章批量改写(附完整配置截图)

本文详细介绍了如何利用飞书、扣子和DeepSeek三款工具,无需编程即可搭建一个高效的公众号文章批量改写自动化工作流。通过飞书多维表格管理链接与成果,扣子平台串联整个流程,并调用DeepSeek智能体进行内容润色与改写,实现从内容抓取到智能处理的完整自动化,大幅提升新媒体运营效率。

python9snake的博客 208

Android Bitmap 和Drawable

在Android SDK已经有了绝大多数的Drawable实现类,比如等,但是有时侯还是需要自定义的,比如画一个图表.自定义Drawable 的一个重要作用是可以作为自定义View的一个绘制模块,相当对View更加灵活.当多个View都要绘制某个图时,可以搬到一个Drawable中.下面看看如何自定义一个Drawable.// 绘制Drawable之前必须设置 bounds/*** @param values - 所有值数组* @param colors - 值对应的颜色数组*/return。

star_nwe的博客 420

Python 爬虫实战:抓取应届生求职网校招岗位信息,助力学子就业

应届生求职网作为国内知名的招聘平台,汇聚了大量企业的校招岗位信息。了解这些岗位信息,对于应届毕业生制定求职策略、企业制定招聘计划以及相关就业市场分析等都具有重要意义。因此,本文将深入探讨如何运用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息,为应届毕业生提供有益的就业信息支持。本文深入探究了利用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息的全流程。从前期的环境搭建、模拟登录,到核心的数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。

u014481728的博客 1300

Android Bitmap 和Drawable的区别

直接操作:Bitmap:允许直接操作图像的像素数据,适用于图像处理和操作。Drawable:无法直接操作像素数据,更适合于通用的图形绘制。灵活性:Bitmap:主要用于位图图像,较为简单直接。Drawable:抽象类,提供了更丰富的子类和功能,适用于更复杂的图形操作。内存管理:Bitmap:占用内存较多,需要手动管理生命周期(如调用recycle()方法)。Drawable:内存管理由系统负责,相对更加安全和方便。类型支持:Bitmap:仅支持位图图像。

猿小蔡的博客 844

手把手教你学Simulink——基于自动驾驶辅助系统的场景实例:车道保持辅助系统(LKA)的仿真与实现

本文通过Simulink实例讲解车道保持辅助系统(LKA)的实现方法。首先介绍LKA从预警到主动控制的技术演进,阐述其系统架构、核心组件和工作原理。重点演示基于自行车模型的车辆横向动力学建模过程,以及使用线性二次调节器(LQR)设计横向控制器的详细步骤。教程包含四个仿真场景测试,分析关键指标如控制精度、舒适性和响应性。最后探讨LKA技术的发展方向,强调人机协同的安全理念。该实例为自动驾驶辅助系统开发提供了完整的Simulink实践方案。

MHD0815的博客 182

基于毫米波生物感知雷达+STM32设计的独居老人居家监护系统(微信小程序)(192)

当前基于STM32设计的独居老人居家监护系统为独居老人提供一种简便、实时的健康监护服务。该系统通过集成多种传感器和功能模块,能够实时监测老人的生理指标、姿态以及室内环境状况,并通过微信小程序远程显示数据,当出现异常情况时及时发出报警提醒。

1万+

android drawable和bitmap,自定义View Bitmap与Drawable的区别

1.什么是BitmapBitmap 是位图信息的存储,就是一个矩形图像每个像素的颜色信息的存储器。2.什么是Drawable2.1.Drawable是一种可以在Canvas上进行绘制的抽象的概念。Drawable 是一个可以调用Canvas来进行绘制的上层工具。Drawable.draw(canvas)可以将Drawable设置的绘制内容绘制到Canvas中。2.2.Drawable的内部存储的是...

weixin_34329524的博客 1057

Vue2 - 详细实现安装西瓜视频 xgplayer 插件详细配置及使用教程,利用西瓜视频播放器播放 mp4、flv、hls 格式视频文件及视频推流(直播或监控摄像头画面),支持移动端H5及PC网站!

vue2,nuxt2,西瓜视频,xgplayer,插件组件,xgplayer-hls,xgplayer-flv,xgplayer-mp4,播放视频点播和直播视频流,自定义播放器样式,截屏,监控视频,vue使用西瓜播放器播放flv、hls、mp4视频,截屏按钮,直播流,报错,黑屏,加载失败,苹果ios不兼容,重连,怎么改样式,很卡,详细教程,监控实时播放推流,倍速播放,在线flv在线推流地址,HLS播放,vue西瓜播放器,vue如何使用西瓜视频插件做直播推流回流,视频点播,flv在线视频流播放,截图功能,利用

🏆 前端领域优质创作者 1万+

android drawable xml bitmap,Android Bitmap和Drawable的对比

Android Bitmap和Drawable的对比Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些...

weixin_39669133的博客 144

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android bitmap对比,Android Bitmap和Drawable的对比

Android Bitmap和Drawable的对比Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些...

weixin_39595271的博客 286

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android drawable xml bitmap,Android Drawable和Bitmap的转换实例详解

Android Drawable和Bitmap的转换实例详解通常我们需要通过代码去设置图片,就需要设置图片Bitmap和Drawable的转换,下面整理了几种方式一、Bitmap转DrawableBitmap bm=xxx; //xxx根据你的情况获取BitmapDrawable bd=new BitmapDrawable(bm);//因为BtimapDrawable是Drawable的子类,最终...

weixin_35021207的博客 560

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android 如何将Drawable和Bitmap画到屏幕上

Drawable画到屏幕上:protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawColor(Color.WHITE); int startX=10; int startY=10; int

GaoMatrix的专栏 1万+

安卓开发-Bitmap和Drawable的区别

Bitmap是逐像素存储的。存储效率较低。 Drawable是安卓平台下通用的图形对象。它可以装载常用的格式的图片,包括bmp。

imzoer的专栏 2134

Android P实现Bitmap、Byte[]数组和Drawable之间的相互转换

在安卓开发中,会经常用到将图片转化成byte[]数组保存或者传输,然后再将byte[]数组转换成图片格式,得到图片。 一、将图片转换成byte[]数组 public static byte[] bitmap2Bytes(Bitmap bitmap){ if( null != bitmap ){ ByteArrayOutputStream baos = new ByteArr...

Sunxiaolin2016的博客 1447
上一篇: 参数传递问题
下一篇: 详解Android动画之Frame Animation
AndroidLiuBin
博客等级 码龄15年 2粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值