自定义Camera综述(一般步骤、注意事项、遇到的难题<【内存溢出问题】>、像素参考)
一般步骤:
1. 检查和访问Camera:创建代码来检查Camera和所申请访问的存在性;
2. 创建一个预览类:继承SurfaceView来创建一个Camera的预览类,并实现SurfaceHolder接口。这个类用来预览来自Camera的实时图像。
3. 构建一个预览布局:一旦有了Camera预览类,就可以把这个预览类和你想要的用户界面控制结合在一起来创建一个视图布局。
4. 针对采集建立监听:把监听器与响应用户动作(如按下按钮)的界面控制连接到一起来启动图像或视频的采集。
5. 采集和保存文件:针对真正采集的图片或视频,以及输出的保存来编写代码。
6. 释放Camera:使用Camera之后,你的应用程序必须释放Camera,以便其他应用程序能够使用。
注意事项:
Camera硬件是一个必须要认真管理的共享资源,因此你的应用程序在使用它时,不能跟其他应用程序发生冲突。(以后会讨论如何检查Camera硬件、如何申请对Camera的访问,如何采集图片和视频,以及在应用使用完成后如何释放Camera。)
警告:在应用程序使用完Camera时,要记住通过调用Camera.release()方法来释放Camera对象。如果你的应用程序没有正确的释放Camera,所有的后续的视图对Camera的访问,包括你自己的应用程序,都会失败,并可能到你的或其他的应用程序关闭。
遇到的难题:
1、Activity之间切换出现短暂黑屏。
在默认情况下,Android应用程序启动时,会有一个黑屏的时期。同样,使用startActivity(intent)方法从一个Activity进入到新的Activity时,这个过程中也会出现短暂的黑屏。原因是,首个activity会加载一些数据,比如初始化列表数据、向服务器发送请求获取数据等等。这个问题的存在是由Android应用框架决定的,但的确很影响用户体验。下面就动手来解决这个黑屏问题!
第一步:自定义Theme(主题)——使目标Activity透明
在your_project/res/values/styles.xml中加入自定义Activity的Theme,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Activity主题 -->
<style name="activityTheme" parent="@android:style/Theme">
<item name="android:windowIsTranslucent">true</item>
</style>
</resources>
其中<item name="android:windowIsTranslucent">true</item>的意思是设置目标Activity(要启动的那个Activity)是透明的。很容易理解,两个Activity,A和B;在A中启动B,因为B是透明的,看到的背景仍是A,这样就解决了这个短暂的黑屏问题。
第二步:修改Manifest,将Theme应用到目标Activity上
定义好Theme后,就该为对应的Activity绑定Theme了。这个代码主要在Manifest中实现,在Activity中加上以下属性:
<activity android:name=".activity.PlacingOrderStep1Activity" android:theme="@style/activityTheme" />
到此问题解决!
2、图片处理出现内存溢出问题。
原因:
- 大量使用createBitmap、setImageBitmap、setImageResource、BitmapFactory.decodeResource来设置一张大图;因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。
- 对处理完的Bitmap未进行显式的回收操作。if(bitmapObject.isRecycled()==false) //如果没有回收 { bitmapObject.recycle(); }
解决方法:
- 在左右旋转图片时采用:
通过BitmapFactory.decodeStream方法,创建bitmap,再将其设为ImageView的 source;decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。BitmapOrgLeft = BitmapFactory.decodeStream(new FileInputStream(MatrixLeftFile), null, RotateOptions);
采用压缩转档方法:BitmapOrgLeft.compress(Bitmap.CompressFormat.JPEG, 100, bos);
- 在其他特效处理时采用:
通过【线程】处理图片,将Bitmap转换为Drawable来处理,进而使用setImageDrawable(BitmapDrawable)来显示图片。
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
Drawable targetBitmapDrawable = new BitmapDrawable((Bitmap) msg.obj);// 将Bitmap转换为Drawable
is.setImageDrawable(targetBitmapDrawable);
}
};
每次线程处理完图片,都进行线程的回收。
thread.start();
thread = null;
到此问题【部分】解决,最终只能做到最大5M的图片处理!
像素参考:
800万 3264x1836 8M
500万 2592x1944 5 M(目前已实现的)
300万 2048x1536 3.2M
UXGA 1600x1200 1920x1088 2M
XGA 1024x768 0.8M SVGA 800x600
VGA 640x480 0.3M
自定义Camera综述(一般步骤、注意事项、遇到的难题<【内存溢出问题】>、像素参考)的更多相关文章
- Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能
Android Camera开发系列(下)--自定义Camera实现拍照查看图片等功能 Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 上 ...
- 自定义Dialog的详细步骤(实现自定义样式一般原理)
现在很多App的提示对话框都非常有个性,然而你还用系统的对话框样式,是不是觉得很落后呢,今天我就给大家讲讲怎样自定义自己的Dialog,学会了之后,你就会根据自家app的主题,设计出相应的Dialog ...
- Android 自定义Camera 随笔
一.权限 <uses-permission android:name="android.permission.CAMERA" /> <uses-permiss ...
- android自定义相册 支持低端机不内存溢出
1 之前在网上看的自定义相册很多时候在低端机都会内存溢出开始上代码把 首先我们要拿到图片的所有路径 cursor = context.getContentResolver().query( Media ...
- [Android] 对自定义图片浏览器经常内存溢出的一些优化
首先关于异步加载图片可以参见 夏安明 的博客:http://blog.csdn.net/xiaanming/article/details/9825113 这篇文章最近有了新的更改,大概看了一下,内容 ...
- React Native绑定微信分享/登录/支付(演示+实现步骤+注意事项)
React Native(以下简称RN)绑定微信分享/微信登录/微信支付的实现演示+源码+注意事项!微信的调用大同小异,本文实现了微信的分享功能,其他功能可以在链接文档里面找到具体的方法. 本文分文三 ...
- HanLP的自定义词典使用方式与注意事项介绍
[环境]python 2.7 方法一:使用pyhanlp,具体方法如下: pip install pyhanlp # 安装pyhanlp 进入python安装包路径,如 /usr/lib/pytho ...
- MIP组件开发 自定义js组件开发步骤
什么是百度MIP? MIP(Mobile Instant Pages - 移动网页加速器)主要用于移动端页面加速 官网参考:https://www.mipengine.org/doc/00-mip-1 ...
- android自定义camera以及uri和文件路径之间的转换
相对直接调用系统的camera,这种方法使用得相对还少一些.根据api文档,步骤如下: 定义一个预览类 可以参照<android高薪之路>这本书上面,有这种方法的一种完整实现 而对应的ac ...
随机推荐
- java.util.regex.PatternSyntaxException: Unclosed character class near index解决办法
使用str.split("[")时,出现java.util.regex.PatternSyntaxException: Unclosed character class near ...
- apache prefork和worker模式的比较
http://www.t086.com/article/4443 http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html
- nyoj-291 互素数个数 欧拉函数
LK的数学题 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 LK最近遇到一个问题,需要你帮她一下.一个整数n,求[1,n)中,和n互素的数的个数. 输入 多组测 ...
- HDU 4686 Arc of Dream(矩阵)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题意: 思路: #include <iostream>#include <cs ...
- MyBatis学习总结(5)——实现关联表查询
一对一关联 提出需求 根据班级id查询班级信息(带老师的信息) 创建表和数据 创建一张教师表和班级表,假设一个老师负责教一个班,那么老师和班级之间的关系就是一对一的关系. create table t ...
- linux/unix网络编程之epoll
转载自 Linux epoll模型 ,这篇文章讲的非常详细! 定义: epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显 ...
- poj 2886 Who Gets the Most Candies?(线段树和反素数)
题目:http://poj.org/problem?id=2886 题意:N个孩子顺时针坐成一个圆圈且从1到N编号,每个孩子手中有一张标有非零整数的卡片. 第K个孩子先出圈,如果他手中卡片上的数字A大 ...
- HDU 4869 Turn the pokers (2014 Multi-University Training Contest 1)
Turn the pokers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Go Deeper(2010成都现场赛题)(2-sat)
G - Go Deeper Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description ...
- btr_cur_t;
/** B-tree cursor */ typedef struct btr_cur_struct btr_cur_t; /** The tree cursor: the definition ap ...