android Bitmap(将视图转为bitmap对象)
1)从android的资源文件夹layout中加载xml布局文件,并把布局文件映射为Bitmap
main.xml文件如下:
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"android:layout_width="256px"
- android:layout_height="256px">
- <TextViewandroid:layout_width="wrap_content"android:id="@+id/city"
- android:layout_height="wrap_content"android:textSize="20px"
- android:textColor="#ffffff"android:shadowColor="#0000AA"
- android:shadowDx="0"android:shadowDy="-2"android:shadowRadius="0.1"
- android:layout_gravity="right"android:layout_marginRight="5px"/>
- </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="256px"
android:layout_height="256px">
<TextView android:layout_width="wrap_content" android:id="@+id/city"
android:layout_height="wrap_content" android:textSize="20px"
android:textColor="#ffffff" android:shadowColor="#0000AA"
android:shadowDx="0" android:shadowDy="-2" android:shadowRadius="0.1"
android:layout_gravity="right" android:layout_marginRight="5px" />
</LinearLayout>
java代码中的处理,方法一:
- //加载xml布局文件
- LayoutInflater factory = LayoutInflater.from(context);
- View view = factory.inflate(R.layout.main, null);
- //获得布局文件中的TextView
- TextView city = (TextView) view.findViewById(R.id.city);
- //设置city的文本信息
- city.setText("xml中的textview");
- //启用绘图缓存
- view.setDrawingCacheEnabled(true);
- //调用下面这个方法非常重要,如果没有调用这个方法,得到的bitmap为null
- view.measure(MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY));
- //这个方法也非常重要,设置布局的尺寸和位置
- view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
- //获得绘图缓存中的Bitmap
- view.buildDrawingCache();
- Bitmap bitmap = view.getDrawingCache();
//加载xml布局文件
LayoutInflater factory = LayoutInflater.from(context);
View view = factory.inflate(R.layout.main, null);
//获得布局文件中的TextView
TextView city = (TextView) view.findViewById(R.id.city);
//设置city的文本信息
city.setText("xml中的textview");
//启用绘图缓存
view.setDrawingCacheEnabled(true);
//调用下面这个方法非常重要,如果没有调用这个方法,得到的bitmap为null
view.measure(MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY));
//这个方法也非常重要,设置布局的尺寸和位置
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
//获得绘图缓存中的Bitmap
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
java代码中的处理,方法二:
- //加载xml布局文件
- LayoutInflater factory = LayoutInflater.from(context);
- View view = factory.inflate(R.layout.main, null);
- //获得布局文件中的TextView
- TextView city = (TextView) view.findViewById(R.id.city);
- //设置city的文本信息
- city.setText("xml中的textview");
- //调用下面这个方法非常重要,如果没有调用这个方法,得到的bitmap为null
- view.measure(MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY));
- //这个方法也非常重要,设置布局的尺寸和位置
- view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
- //生成bitmap
- Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
- Bitmap.Config.RGB_565);
- //利用bitmap生成画布
- Canvas canvas = new Canvas(bitmap);
- //把view中的内容绘制在画布上
- view.draw(canvas);
//加载xml布局文件
LayoutInflater factory = LayoutInflater.from(context);
View view = factory.inflate(R.layout.main, null);
//获得布局文件中的TextView
TextView city = (TextView) view.findViewById(R.id.city);
//设置city的文本信息
city.setText("xml中的textview");
//调用下面这个方法非常重要,如果没有调用这个方法,得到的bitmap为null
view.measure(MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(256, MeasureSpec.EXACTLY));
//这个方法也非常重要,设置布局的尺寸和位置
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
//生成bitmap
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
Bitmap.Config.RGB_565);
//利用bitmap生成画布
Canvas canvas = new Canvas(bitmap);
//把view中的内容绘制在画布上
view.draw(canvas);
2)Bitmap转换为byte[]数组
方法一:
- privatebyte[] Bitmap_To_Bytes(Bitmap bitmap){
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
- return baos.toByteArray();
- }
private byte[] Bitmap_To_Bytes(Bitmap bitmap){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
方法二:
- publicstaticbyte[] readStream(InputStream inStream) throws Exception {
- byte[] buffer = newbyte[1024];
- int len = -1;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- while ((len = inStream.read(buffer)) != -1) {
- baos .write(buffer, 0, len);
- }
- byte[] data = baos .toByteArray();
- baos .close();
- inStream.close();
- return data;
- }
public static byte[] readStream(InputStream inStream) throws Exception {
byte[] buffer = new byte[1024];
int len = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((len = inStream.read(buffer)) != -1) {
baos .write(buffer, 0, len);
}
byte[] data = baos .toByteArray();
baos .close();
inStream.close();
return data;
}
3)设置在应用中支持32位的图像:
在onCreate()函数中加入以下两行:
- getWindow().setFormat(PixelFormat.RGBX_8888);
- BitmapFactory.setDefaultConfig(Bitmap.Config.ARGB_8888);
getWindow().setFormat(PixelFormat.RGBX_8888);
BitmapFactory.setDefaultConfig(Bitmap.Config.ARGB_8888);
以使之 支持32bit的图像。
4)把drawable文件夹下的文件转成Bitmap
- Bitmap bm = BitmapFactory.decodeResource(getApplicationContext().getResources(),
- R.drawable.down);
android Bitmap(将视图转为bitmap对象)的更多相关文章
- Android如何缓存你的BITMAP对象
在app中通常最占内存.占流量的元素就是图片了,图片往往又无处不在,特别是伴随着list,GridView或者ViewPager出现,这些图片随着你的滑动操作,时而出现在你的屏幕中,时而消失在屏幕之外 ...
- Android从本地选择图片文件转为Bitmap,并用zxing解析Bitmap
如何从本地选择图片文件 使用Intent调用系统相册后,onActivityResult函数返回的是Uri格式的路径 /** * 打开系统相册 */ private void openSysAlbum ...
- Android菜鸟成长记15 -- BitMap
BitMap简介 Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bi ...
- 解析Android开发优化之:对Bitmap的内存优化详解
在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图 ...
- Android开发优化之——对Bitmap的内存优化
http://blog.csdn.net/arui319/article/details/7953690 在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitm ...
- Android性能优化:谈话Bitmap内存管理和优化
最近除了那些忙着项目开发的事情,目前正在准备我的论文.短的时间没有写博客,今晚难得想总结.只要有一点时间.因此,为了凑合用,行.唠叨罗嗦,直接进入正题. 从事Android自移动终端的发展,想必是常常 ...
- android 在HTML中显示bitmap
逻辑:将bitmap转化为Base64,通过调用HTML中的JS,显示到HTML中 (1)android代码 public String bitmaptoString(Bitmap bitmap) { ...
- Android中经常使用的bitmap处理方法
收集了非常多bitmap相关的处理方法,差点儿所有应用在项目中,所以特记录下! package com.tmacsky.utils; import java.io.ByteArrayOutputStr ...
- Android有效的治疗方法Bitmap,减少内存
Android有效的治疗方法Bitmap,减少内存 照片可能有不同的大小. 在很多情况下,大小.比如,我们的Camera应用,我们所拍的照片的大小远大于屏幕显示的大小 假如你的应用被限制了内存使用,显 ...
随机推荐
- Yii框架中的CURD操作
<?php $Admin = new Admin(); //查找多条记录,返回二维数组 $Admin->findAll(); $Admin->findAll("id = 2 ...
- 解决ASP.NET回传后div滚动条位置复位的问题
中心思想:用一个隐藏控件保存当前scorll值.回传回来后根据scrollTop的值,然后在Page_Load中重新设置scrollTop. 首先是为DIV添加一个 onscroll="ja ...
- orcad10.5启动加速
OrCAD不知道怎么滴,启动速度慢的让人崩溃!30秒算快的,有时候甚至几分钟,要么需要连续开N次才打开,苦啊!!经过网上无数文章的洗礼,无数次的尝试,终于得出一种特效方法! 原因:OrCAD启动时在电 ...
- VS QT 配置OpenGL
在visual studio 下编译OpenGL代码出现以下错误,原因是vs没有自带opengl库,需要自己引入 无法解析的外部符号 __imp__glClear@4 无法解析的外部符号 __imp_ ...
- AnyEvent::HTTP 介绍
AnyEvent::HTTP - simple but non-blocking HTTP/HTTPS client 一个简单的非堵塞的 HTTP/HTTPS 客户端: use AnyEvent::H ...
- Hadoop HDFS分布式文件系统设计要点与架构
Hadoop HDFS分布式文件系统设计要点与架构 Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...
- java学习之反射
package com.gh.ref; public class Person { private String name; private int age; private char sex; pr ...
- poj 1936 All in All(水题)
题目链接:http://poj.org/problem?id=1936 思路分析:字符串子序列查找问题,设置两个指针,一个指向子序列,另一个指向待查找的序列,查找个字符串一次即可判断.算法时间复杂度O ...
- iOS KVO & KVC
键值观察:值更改时通知观察者 键值观察(Key-value observing,或简称 KVO)允许对象观察另一个对象的属性.该属性值改变时,会通知观察对象.它了解新值以及旧值:如果观察的属性为对多的 ...
- VS插件开发——格式化变量定义语句块
插件介绍 代码地址:https://github.com/sun2043430/vs2008_format_variable_define_plugin/ 在vs里,对选中的变量定义块进行格式化,效果 ...