图片处理之 ——— Bitmap(常见方法及图片圆角实现)
方法 实现 处理 图片 常见 bitmap 圆角
2023-09-27 14:28:04 时间
转载请申明:http://blog.csdn.net/u011418943/article/details/53002644
最常用的就是Bitmap了,可以把它看成是一个画架,我们可以在上面进行一些处理,比如压缩,旋转切割,获取信息等。
而他也是造成OOM的元凶之一,现在我们来一起学习它。
一、了解Bitmap
从源码上看,我们发现它是私有的类,所以子类无法修改,只能继承,但是它又提供了一个接口让我们调用,它就是 BitmapFactory 。
BitmapFactory 提供的方法,可以看下面这个图:
- decodeFile 主要获取SD获取其他一些存储设备的
- decodeResource 获取系统资源
decodeStream 获取网络图片
我们可以从一个文件中获取我们的图片,也可以从制定资源中取出我们的图片。
可以看到后面跟着的都是 Option 选项,Option 的下列属性,可以制定decode的属性:
- inPreferredConfig 指定decode到内存中,手机中所采用的编码,可选值定义在Bitmap.Config中。缺省值是ARGB_8888。
- inJustDecodeBounds 如果设置为true,并不会把图像的数据完全解码,decode 为null,即不获取图片,不分配内存,但是会返回图片的信息。一般配合 inSampleSize 设置压缩比例。
- inSampleSize 设置decode时的缩放比例。
上面的这些属性,我们一般是用于处理图片的压缩。
二、Bitmap 常用方法
boolean isRecycled():判断位图内存是否已释放
int getWidth():获取位图的宽度
int getHeight():获取位图的高度
boolean isMutable():图片是否可修改
int getScaledWidth(Canvas canvas):获取指定密度转换后的图像的宽度
int getScaledHeight(Canvas canvas):获取指定密度转换后的图像的高度
Bitmap createBitmap(Bitmap src):以src为原图生成不可变得新图像
Bitmap createScaledBitmap(Bitmap src, int dstWidth,int dstHeight, boolean filter):以src为原图,创建新的图像,指定新图像的高宽以及是否变。
Bitmap createBitmap(int width, int height, Config config):创建指定格式、大小的位图
Bitmap createBitmap(Bitmap source, int x, int y, int width, int height)以source为原图,创建新的图片,指定起始坐标以及新图像的高宽。
public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
这里我们用bitmap显示一张图片:
mImageView = (ImageView) findViewById(R.id.bitmap);
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image5);
mImageView.setImageBitmap(mBitmap);
效果:
然后我们不要这么简单,我们让它变成圆角的形式。
让图片变圆角,思路是怎么样的呢?其实挺简单的,我们先创建一个空的 bitmap,让画布与bitmap关联起来,然后把这个画布变成带有圆角的画布,再把我们的要的图片放到我们的画布上,那么它就是带有画布效果的了。代码如下:
private Bitmap bimapRound(Bitmap mBitmap,float index){
Bitmap bitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Config.ARGB_4444);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setAntiAlias(true);
//设置矩形大小
Rect rect = new Rect(0,0,mBitmap.getWidth(),mBitmap.getHeight());
RectF rectf = new RectF(rect);
// 相当于清屏
canvas.drawARGB(0, 0, 0, 0);
//画圆角
canvas.drawRoundRect(rectf, index, index, paint);
// 取两层绘制,显示上层
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
// 把原生的图片放到这个画布上,使之带有画布的效果
canvas.drawBitmap(mBitmap, rect, rect, paint);
return bitmap;
}
然后 直接 mImageView.setImageBitamp(bimapRound(mBitmap,30));即可
效果:
三、Drawable 与 Bitmap 的转换
Drawable 转 Bitmap
BitmapDrawable bd = (BitmapDrawable) drawable;
Bitmap bitmap = bd.getBitmap();
Bitmap 转 Drawable
Drawable drawable =new BitmapDrawable(bmp);
相关文章
- C#实现身份证号码验证的方法
- python 传入任意多个参数(方法调用可传参或不传参)
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
- Python中NotImplementedError的使用方法(抽象类集成子类实现)
- Java 反射调用方法实例,动态动用方法实例
- js new一个对象的过程,实现一个简单的new方法
- 2.3.3 进程互斥的硬件实现方法
- 机器学习笔记之密度聚类——DBSCAN方法(Python代码实现)
- jQuery技术内幕:深入解析jQuery架构设计与实现原理. 3.11 便捷方法
- 诊断并解决 SSH 连接慢的方法诊断并解决 SSH 连接慢的方法
- 从web页面启动winform程序的实现方法
- C#实现发送邮件的三种方法
- MVC缓存03,扩展方法实现视图缓存
- I2C和I2S的区别和使用方法
- ubuntu下安装ssh服务器方法
- 几种获取时间戳与获取自定义时间戳的实现方法
- 让Sql Server 2008 可以远程连接的方法
- 瀑布流网页的实现中遇到的问题和解决方法
- MySQL修改root密码的各种方法整理
- STM32单片机裸机程序-高级实现实时性处理方法
- 一文搞懂MBI5034芯片(附使用方法)
- Android学习之修改app名字和修改project名字的方法
- Android日期对话框NumberPicker的使用方法教程
- 小学生python游戏编程arcade----游戏界面按钮实现事件实现的三种方法
- Unity 基础之 实现动态加载网络端、PC端和 Android 端指定路径下的图片的简单方法
- 学习笔记(17):Python网络编程&并发编程-Process对象的其他属性或方法
- C# FileStream 对象的Seek()方法
- C#-IO-Path类-path.GetFullPath 获取上级目录实现方法
- python 多种定时任务实现方法和举例,包括sleep、Timer、schedule、APScheduler等
- 【python】dict多种方法实现去除字典value为0 的元素
- windows 下mysql每日定时备份的几种方法