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 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
随机推荐
- WPF WebBrowser 不可见问题的解析[转]
问题概述: 1.在Xaml中加入WebBrowser(不论是WPF中的控件,还是Winform中的控件) 2.设置Window Background="Transparent" A ...
- [C#]获取最近在Windows上所使用的文件
class RecentlyFileHelper { public static string GetShortcutTargetFile(string shortcutFilename) { var ...
- dedecms 常用标签调用
/*------------------单个ip调用-------------------*/ {dede:type typeid="12"} <a title=" ...
- cygwin编译ffmpeg移植到android平台问题集锦
编译环境: windows xp Cygwin 1.1.3.1 NDK r9 1.提示各种command not found 比如 ./config.sh: line 6: $'--arch=arm\ ...
- SharePoint 2013 弹窗效果之URL打开方式(一)
在SharePoint中想做一个弹出效果其实很简单,仅仅在js中使用SharePoint Modal Dialog, 以下做一个简单的例子:很多情况下我们会通过linkButton弹出一个详细页面,那 ...
- Area of Simple Polygons
poj1389:http://poj.org/problem?id=1389 题意:求矩形面积的并题解:扫描线加线段树 同poj1389 #include<iostream> #inclu ...
- ios开发学习--歌词处理--解析lrc文件
我觉得要想解析lrc 首先大家应该了解一下lrc文件的结构,大家可以去看一下**百科 我这里粗略的写一下: ■ 时间标签(Time-tag) 形式为"[mm:ss]"(分钟数:秒数 ...
- npm check failed 解决办法
npm ERR! shasum check failed for C:\Users\MM\AppData\Local\Temp\npm-10900-415697c8\registry.npmjs.or ...
- Gvim一些基本配置
介绍一些关于Gvim(windows 7 32位 Vim 7.4)的基本配置,除了特别说明,代码一律添加在安装目录下的_vimrc文件中. 1.取消自动备份,这行代码需要添加在 _vimrc文件中的b ...
- [LeetCode#55, 45]Jump Game, Jump Game II
The problem: Given an array of non-negative integers, you are initially positioned at the first inde ...