android开发之bitmap使用
bitmap是android中重要的图像处理工具类,通过bitmap可以对图像进行剪切、旋转、缩放等操作,同时还可以指定格式和压缩质量保存图像文件。
一、拿到一个Bitmap对象
查看源码我们知道,Bitmap被final修饰,因此不可以通过new来获得一个bitmap的实例,获得一个Bitmap对象一般都是通过BitmapFactory来获得,主要有以下几方式。
每一个方法都有自己的重载方法,重载方法多出的参数是Options,解释一下这个参数,这个主要是对生成Bitmap对象做一些简单的处理。
inPreferredConfig 指定decode到内存中,手机中所采用的编码,可选值定义在Bitmap.Config中。缺省值是ARGB_8888。
inJustDecodeBounds 如果设置为true,并不会把图像的数据完全解码,亦即decodeXyz()返回值为null,但是Options的outAbc中解出了图像的基本信息。
inSampleSize 设置decode时的缩放比例。当值大于1时会对图像进行压缩,比如设置为4时,返回的图像宽高都将是原始图像的四分之一,像素是原始图像的十六分之一,如果设置的值小于1,则会被当作1来处理。注意,这里设值必须是2的次幂,其他值会被就近取离2的次幂最近的值。
通过option的这些属性,我们就可以获得一张图片的缩略图啦,一个基本思路是先设置inJustDecodeBounds为true,拿到图像的基本信息,比如宽和高,根据基本信息结合缩略图目标宽高,算出inSampleSize ,然后再设置inJustDecodeBounds为false,获得缩略图。
想要获得一个Bitmap对象,可以通过一个图像的完整路径,或者是通过一个字节流或者是通过字节亦或者是通过本地的资源文件,都可以获得一个Bitmap对象。
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// /storage/emulated/0/DCIM/Camera/123.jpg
String path = Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ File.separator
+ "DCIM"
+ File.separator
+ "Camera"
+ File.separator
+ "123.jpg";
BitmapFactory.Options option = new BitmapFactory.Options();
option.inSampleSize = 1;
//通过完整路径获得Bitmap对象
Bitmap bm = BitmapFactory.decodeFile(path,option);
FileInputStream is = new FileInputStream(new File(path));
//通过一个输入流获得Bitmap对象
Bitmap bm2 = BitmapFactory.decodeStream(is);
//通过本地资源获得一个Bitmap对象
Bitmap bm1 = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
iv.setImageBitmap(bm2);
}
二,保存图像文件
拿到了Bitmap之后可以直接显示出来,也可以先保存到本地等待处理,Bitmap可以保存为jpg,png,gif等格式,保存方式也是非常简单:
Bitmap bp = revitionImageSize(path + "123.jpg");
FileOutputStream out = new FileOutputStream(path + "456.gif");
//0意味着压缩到最小,100意味着压缩后的质量最好,PNG是无损图像,会忽略这个参数
// bp.compress(Bitmap.CompressFormat.JPEG, 100, out);
bp.compress(Bitmap.CompressFormat.PNG, 0, out);
out.flush();
out.close();
直接调用compress方法,第一个参数表示压缩的方式,有多种,PNG属于无损压缩,JPEG是有损压缩。第二个参数表示压缩质量,取值为0-100,100表示压缩图像质量最高,但同时压缩率低,0表示压缩图像质量最差,同时压缩率高。但是,这个参数是否有效与第一个参数有关,如果第一个参数选择了PNG,及无损压缩,那么第二参数是无效的。第三个参数是你要输出的字节流。
版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。
android开发之bitmap使用的更多相关文章
- Android开发之Bitmap.Config.RGB_565
在学习xutils框架的时候,看到sample代码中有一行这样的代码: bitmapUtils.configDefaultBitmapConfig(Bitmap.Config.RGB_565); Bi ...
- 【转】Android开发之Bitmap的内存优化详解
本文来源:转载自: http://mobile.51cto.com/abased-410796.htm 在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitma ...
- Android开发之Bitmap二次采样
Bitmap二次采样,听着好像是一个高大上的事,其实也就那么回事,今天我们就来看看Bitmap的二次采样问题. 1.为什么要二次采样 OK,那么首先我要 解决的一个问题就是为什么我们要二次采样? 不知 ...
- Android开发之Bitmap的高效加载
BitmapFactory类提供了四类方法:decodeFile, decodeResource, decodeStream和decodeByteArray 分别用于支持从文件系统,资源,输入流以及字 ...
- android开发之Bitmap 、byte[] 、 Drawable之间的相互转换
一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...
- Android开发之InstanceState详解
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之InstanceState详解(转)---利用其保存Activity状态
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
- Android开发之Git配置
Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...
随机推荐
- 【Tools】Chrome开发者工具详解
作为一名前端开发者,打交道最多的可能是和浏览器.市面上各种浏览器多不胜数,主流的有Chrome,Firefox,Safari,IE,Opera,非主流的如360,遨游,QQ浏览器,搜狗浏览器,据说淘宝 ...
- [转贴]Windows下gSoap交叉编译环境的搭建
本人直接就用过gSoap,它是用以C/C++写webservice的利器 交叉编译的时候,有两个很关键的程序: soapcpp2.exe wsdl2h.exe ...
- vs2010创建和使用动态链接库(dll)
本文将创建一个简单的动态链接库,并编写一个应用台控制程序使用该动态链接库,并提出了与实现相关的几个问题,供初学者交流. 本文包含以下内容: 创建动态链接库项目 向动态链接库添加类 创建引用动态链接库的 ...
- mybatis源码分析(2)——事务概述
这篇文章主要对mybatis中的事务做一简单的分析,帮助读者理清一些概念. 先来看看在JAVA事务的相关技术,在JAVA中有两类事务,JDBC事务和JTA事务,如果是JDBC类型的事务,则是由Conn ...
- 【转】iOS开发:开发证书知识点总结
原文网址:http://www.jianshu.com/p/9c166a5e4930 1. Error: An App ID with identifier "*" is not ...
- HDOJ --- 2151 Worm
Worm Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 再也不用担心ie下console.log报错了。。。
习惯了在ff或者chrome下暴力调试的你会不会忘记注释掉而在ie下报错呢,那么可以加这个代码: if (typeof console == "undefined") { this ...
- SQLServer使用规范(转载)
SQLServer使用规范 常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 4.自 ...
- visual studio 资源视图 空白 解决方案
visual studio 资源视图打开后显示空白的解决方案步骤: 在解决方案view下,右键点击工程 1 unload projects 完成第一步后仍然在解决方案view下,右键点击工程 2 re ...
- HDOJ/HDU 2352 Verdis Quo(罗马数字与10进制数的转换)
Problem Description The Romans used letters from their Latin alphabet to represent each of the seven ...