Android Bitmap开发之旅--基本操作
1 Bitmap加载方式
在介绍Bitmap--OOM 异常时,首先介绍一下Bitmap有哪几种加载方式。通常Bitmap的加载方式有Resource资源加载、本地(SDcard)加载、网络加载等加载方式。
1.1 Resource资源加载
- Assets资源加载方式:
- AssetManager am = getAssets();
- InputStream is = am.open("high_pixel_img.jpg");
- Bitmap bitmap = BitmapFactory.decodeStream(is);
- Res资源加载方式:
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);
1.2 本地(SDcard)加载
- String file_name = Environment.getExternalStorageDirectory().toString()+"/"+"high_pixel_img.jpg";
- nbsp;Bitmap bitmap = BitmapFactory.decodeFile(file_name);
文件描述符
1.3 网络加载
注意:网络加载图片的时候必须在非主线成中操作
- String website = "http://www.baidu.com/img/baidu_sylogo1.gif";
- URL image_url = new URL(website);
- HttpURLConnection conn = (HttpURLConnection) image_url.openConnection();
- conn.connect();
- InputStream is = conn.getInputStream();
- bitmap = BitmapFactory.decodeStream(is);
2 Bitmap | Drawable | InputStream | Byte[ ] 之间进行转换
2.1 Drawable转化成Bitmap
- Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
- 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);
- //canvas.setBitmap(bitmap);
- drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
- drawable.draw(canvas);
2. 2 Bitmap转换成Drawable
- Drawable drawable = new BitmapDrawable(bitmap);
2.3 Bitmap转换成byte[]
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
- byte[] info = baos.toByteArray();
2.4 byte[]转换成Bitmap
- Bitmap bitmap = BitmapFactory.decodeByteArray(byte, 0, b.length);
2.5 InputStream转换成Bitmap
- InputStream is = getResources().openRawResource(id);
- Bitmap bitmap = BitmaoFactory.decodeStream(is);
2.6 InputStream转换成byte[]
- InputStream is = getResources().openRawResource(id);//也可以通过其他方式接收一个InputStream对象
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] b = new byte[1024*2];
- int len = 0;
- while ((len = is.read(b, 0, b.length)) != -1)
- {
- baos.write(b, 0, len);
- baos.flush();
- }
- byte[] bytes = baos.toByteArray();
3 转换Bitmap大小
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);
- Bitmap target = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(tartget);
- canvas.scale(scale,scale);
- Paint paint = new Pain(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG);
- canvas.drawBitmap(bitmap,0,0,paint);
- bitmap.recycle();
4 将Bitmap保存为本地文件
- String filename = "save.jpg";
- File file = new File(Environmnet.getExternalStorageDirectory,filename);
- try{
- OutputStream os = new FileOutputString(file);
- bitmap.compress(CompressFormat.JPEG,100,os);
- }catch(FileNotFoundException e){
- e.printStackTrace();
- }
以上是关于Bitmap的相关操作,如果大家在阅读中发现有什么问题,请在评论中留言。
Android Bitmap开发之旅--基本操作的更多相关文章
- Android游戏开发之旅 View类详解
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
- 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建
勤拂拭软件工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html 勤拂拭软件Android开发之旅目录 ...
- Android开发之旅(1) 之 Android 开发环境搭建
工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html Android开发之旅目录 1 前言 很多朋友 ...
- Android项目开发全程(二)--Afinal用法简单介绍
本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...
- android ndk开发(二)实现一个官方demo
实现了一个官方的demo:bitmap-plasma(水波纹) 源代码就在samples文件夹下,可以自己去找. 界面: 建立项目的步骤和配置环境不明白的可以去看:http://www.cnblogs ...
- Android软件安全开发实践(下)
Android开发是当前最火的话题之一,但很少有人讨论这个领域的安全问题.本系列将分两期,探讨Android开发中常见的安全隐患和解决方案.第一期将从数据存储.网络通信.密码和认证策略这三个角度,带你 ...
- 调研Android平台开发环境的发展演变
Android是Google推出的开源手机操作系统,主要以开发应用为主,要进行Android开发首先得搭建好开发平台.最近在搭建Android的开发环境,发现往往一个小问题都能花费你大半天时间,从刚开 ...
- Android Bitmap 全面解析(四)图片处理效果对比 ...
对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多) -------------------------------------- ...
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
随机推荐
- Sublime Text 皮肤插件安装
安装皮肤, 举例sodahttps://github.com/buymeasoda/soda-themectrl+shift+p => Package Control: Install Pack ...
- 《Python 二三事》——python学习必看(转载)
面向初学者介绍Python相关的一些工具,以及可能遇到的常见问题. 原文出处 原文作者:八八年出生的男性,互联网上常用id是 jagttt .目前正从事 IT 行业的工作.业余爱好是动漫游加电 ...
- 从 man 指令起步(info简介)
前言 小生认为一切指令的学习首先要从帮助入手,深入了解它的功能,即使是在实际项目中我们都离不开它的帮助.因为我们不一定能够记住全部指令的全部的相关功能,因此,查看指令的帮助是我们的不二选择. 正文 下 ...
- java.io.serializable
为什么要实现 java.io.serializable? 简单点:“好处就是将来项目如果要做集群的话,就实现java.io.serializable接口”
- dedecms修改templets为别的名字
修改templets模板文件夹的方法: 首先找到系统配置文件common.inc.php,此文件存放在Include目录下,打开common.inc.php来修改默认模板目录templets, 查找: ...
- js字符串 数字 的转换
js 字符串转化成数字 的 三种方法主要有 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数 ...
- linux自动备份文件和数据库并上传到指定的远程FTP中
直接把以下脚本复制到/root/backup.sh[root@lvtao.net ~]# chmod +x /root/backup.sh[root@lvtao.net ~]# crontab -e0 ...
- 1.2机器学习基础下--python深度机器学习
1. 机器学习更多应用举例: 人脸识别 2. 机器学习就业需求: LinkedIn所有职业技能需求量第一:机器学习,数据挖掘和统计分析人才 http://blog.linked ...
- IOS QuartzCore核心动画框架
IOS QuartzCore核心动画框架 核心动画框架 使用核心动画需要引入的框架:#import CALayer: CoreAnimation CALayer就是UIView上的图层,很多的CALa ...
- Java 中 Comparable 和 Comparator 比较(转)
转自http://www.cnblogs.com/skywang12345/p/3324788.html 本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示 ...