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 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
随机推荐
- 汇总前端最最常用的JS代码片段
html5选择器 //参数均接收一个合法的css选择器 element = document.querySelector('.foo,.bar');//返回带有foo或者bar样式类的首个元素 ele ...
- php基础知识【函数】(6)mysql数据库
一.连接和关闭 1.mysql_connect('example.com:3307', 'root', '123456') --打开一个到 MySQL 服务器的非永久连接 2.mysql_pconne ...
- yii 验证确认密码是否一致 【"compare",'compareAttribute'=>'password'】
array("surepassword","compare",'compareAttribute'=>'password','message'=>' ...
- To Build A Dev Env On Linux(Ubuntu)
Step1:System Installing 1)use iso image to Step2:Configuration Step3:Software Installing Step4:Other ...
- 插件和过滤器装饰器开发中的感悟-python-django
写这篇随笔是因为今天自己在写插件和过滤方法的过程中碰壁了,折腾了好久终于稍微发现些问题,在此记下,以作备忘. 在看了xadmin的插件机制后,笔者也想使用该思想来扩展kadmin中视图的方法. 例如, ...
- C程序设计语言练习题1-16
练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本. 代码如下: #include <stdio.h> // 包含标准库的信息 ...
- 研究不定数量参数的函数并实现一个printf函数
一.前提知识 1.如何传递参数(主函数) a.函数的参数是通过栈传递,而且是从右到左依次入栈 b.即使是char型变量,在传递参数时,也是占用两个字节,因为push操作是两个字节为单位的. c.sho ...
- ps批量修改图片
批量更改图片尺寸的ps脚本 高端干货!PHOTOSHOP实用脚本大合集
- jquery如何判断div是否隐藏--useful
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- linux中ls、ls -l、ls -al、ll命令
ls只是简单的列出目录下文件名,ll更加详细的列出了文件的类型.文件所有者权限.文件所有者组权限.文件大小.文件最后修改时间,etc... 我们可以用一个简单的图来说明,如下图1: 图1 1.第一位就 ...