- 浏览: 88841 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
enefry:
不能修改对焦和曝光时间啊.
android 手机拍照流程 -
greenboy1:
楼主 你的方法里面若是保存IM出现问题。
Contact 联系人工具类(二) -
greenboy1:
谢谢分享 非常感谢
Contact 联系人工具类(二) -
greenboy1:
非常好 谢谢
Contact 联系人工具类(一) -
bug_shi:
import com.litsoft.domain.Conta ...
Contact 联系人工具类(一)
android 拍照API流程
1. 在布局文件中添加一个 surfaceView (摄影平面)
2.根据 SurfaceView 获得 Holder (固定器)
3.给固定器设置 SurfaceHolder.Callback ; 这个 Callback 有一系列的周期方法,
比如:surfaceCreated,surfaceChanged,surfaceDestroyed等方法.
①.在surfaceDestroyed 中 打开相机,设置预览效果 ;
②.在surfaceChanged中可以初始化相机( Camera );比如相机的参数: 像素, 大小,格式,开始预览,等等
③.在surfaceDestroyed可以可以停止相机拍摄;释放相机资源
4. 相机自动对焦 的回调处理
Camera.autoFocus( AutoFocusCallback )
AutoFocusCallback 有个接口方法 public void onAutoFocus(boolean focused, Camera camera) { /* 对到焦点拍照 */ if (focused) { takePicture();//见第5步 } }
5.Camera.takePicture(ShutterCallback shutter/*摄像*/, PictureCallback raw/*拍照*/, PictureCallback jpeg/*照片*/)
查看API或者源码,可以发现,这些callback里面都有包含摄像,或者被拍照时的byte[]数据,而这些数据可以根据BitmapFactory变成Bitmap图片.
见源代码如下:
public class ScanBarZBarActivity extends Activity implements SurfaceHolder.Callback{ private static String TAG = "ScanBarZBarActivity"; private Camera mCamera; private Button mButton, mButton1, mButton2; private SurfaceView mSurfaceView; private SurfaceHolder holder; private AutoFocusCallback mAutoFocusCallback = new AutoFocusCallback(); private String path = "WXJSMyPhoto"; private String path1; private Bitmap bmp; private int cnt = 1; private Calendar c; public native String getISBN(Bitmap bmp); private int flag=5; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 隐藏状态栏 */ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); /* 隐藏标题栏 */ requestWindowFeature(Window.FEATURE_NO_TITLE); /* 设定屏幕显示为横向 */ this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.camera); /* SurfaceHolder设定 */ mSurfaceView = (SurfaceView) findViewById(R.id.mSurfaceView); holder = mSurfaceView.getHolder(); holder.addCallback(ScanBarZBarActivity.this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); c = Calendar.getInstance(); /* Button初始化 */ mButton = (Button) findViewById(R.id.myButton); mButton1 = (Button) findViewById(R.id.myButton1); mButton2 = (Button) findViewById(R.id.myButton2); /* 拍照Button的事件处理 */ mButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { /* 告动对焦后拍照 */ mCamera.autoFocus(mAutoFocusCallback); } }); /* Button的事件处理 */ mButton1.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { /* 保存文件 */ Log.i(TAG,"click button2"); if (bmp != null) { /* 检查SDCard是否存在 */ if (!Environment.MEDIA_MOUNTED.equals(Environment .getExternalStorageState())) { /* SD卡不存在,显示Toast信息 */ Toast.makeText(ScanBarZBarActivity.this, "SD卡不存在!无法保存相片,请插入SD卡。", Toast.LENGTH_LONG) .show(); } else { try { /* 文件不存在就创建 */ File f = new File(Environment .getExternalStorageDirectory(), path); Log.i(TAG,"click button2:" + f.getAbsolutePath()); if (!f.exists()) { f.mkdir(); } /* 保存相片文件 */ path1 = String.valueOf(c.get(Calendar.MILLISECOND)) + "camera.jpg"; File n = new File(f, path1); FileOutputStream bos = new FileOutputStream(n .getAbsolutePath()); /* 文件转换 */ bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos); /* 调用flush()方法,更新BufferStream */ bos.flush(); /* 结束OutputStream */ bos.close(); Toast.makeText(ScanBarZBarActivity.this, path1 + "保存成功!", Toast.LENGTH_LONG).show(); cnt++; } catch (Exception e) { e.printStackTrace(); } } } mButton.setVisibility(View.VISIBLE); mButton1.setVisibility(View.VISIBLE); mButton2.setVisibility(View.VISIBLE); /* 重新设定Camera */ stopCamera(); initCamera(); } }); /* 放弃Button的事件处理 */ mButton2.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { mButton.setVisibility(View.VISIBLE); mButton1.setVisibility(View.VISIBLE); mButton2.setVisibility(View.VISIBLE); /* 重新设定Camera */ stopCamera(); initCamera(); } }); } @Override public void surfaceCreated(SurfaceHolder surfaceholder) { try { /* 打开相机, */ mCamera = Camera.open(); mCamera.setPreviewDisplay(holder); } catch (IOException exception) { mCamera.release(); mCamera = null; } } @Override public void surfaceChanged(SurfaceHolder surfaceholder, int format, int w, int h) { /* 相机初始化 */ Log.i(TAG,"init camera"); initCamera(); } @Override public void surfaceDestroyed(SurfaceHolder surfaceholder) { Log.i(TAG,"destoryed camera"); stopCamera(); mCamera.release(); mCamera = null; } /* 拍照的method */ private void takePicture() { if (mCamera != null) { Log.i(TAG,"takePicture"); mCamera.takePicture(shutterCallback, rawCallback, jpegCallback); } } private ShutterCallback shutterCallback = new ShutterCallback() { public void onShutter() { } }; private PictureCallback rawCallback = new PictureCallback() { public void onPictureTaken(byte[] _data, Camera _camera) { } }; private PictureCallback jpegCallback = new PictureCallback() { public void onPictureTaken(byte[] _data, Camera _camera) { /* 取得相仞 */ try { /* 设定Button?视性 */ mButton.setVisibility(View.GONE); mButton1.setVisibility(View.VISIBLE); mButton2.setVisibility(View.VISIBLE); /* 取得相仞Bitmap对象 */ bmp = BitmapFactory.decodeByteArray(_data, 0, _data.length); //发送给isbn分析 // String isbn = getISBN(bmp);获得图片解析后的信息 // Log.i(TAG, "isbn:" + flag + isbn); flag--; if(flag>0){ mCamera.autoFocus(mAutoFocusCallback); } } catch (Exception e) { e.printStackTrace(); } } }; /* 告定义class AutoFocusCallback */ public final class AutoFocusCallback implements android.hardware.Camera.AutoFocusCallback { public void onAutoFocus(boolean focused, Camera camera) { /* 对到焦点拍照 */ if (focused) { takePicture(); } } }; /* 相机初始化的method */ private void initCamera() { if (mCamera != null) { try { Camera.Parameters parameters = mCamera.getParameters(); /* * 设定相片大小为1024*768, 格式为JPG */ parameters.setPictureFormat(PixelFormat.JPEG); parameters.setPictureSize(1024, 768); mCamera.setParameters(parameters); /* 开启预览画面 */ mCamera.startPreview(); } catch (Exception e) { e.printStackTrace(); } } } /* 停止相机的method */ private void stopCamera() { if (mCamera != null) { try { /* 停止预览 */ mCamera.stopPreview(); } catch (Exception e) { e.printStackTrace(); } } } }
发表评论
-
android progressbar 自定义样式
2012-04-27 13:12 0<?xml version="1.0&q ... -
自定义Sync账户
2011-11-28 15:44 896看code -
自定义view图片圆角
2011-11-24 16:43 899没啥说的,看code才是王道。。 -
android 动画
2011-10-18 14:57 757人家的:http://www.htcplayer.com/th ... -
使用PopupWindows
2011-08-18 13:14 2945主要参考资料: http://www.cnblogs.com ... -
service 刷新UI
2011-08-12 21:40 821service 刷新UIservice 刷新UI,见附件 -
Android CTS的使用
2011-01-24 17:06 3156Android CTS的使用1. 下载Android源码(用r ... -
Contact 联系人工具类(一)
2010-11-12 16:44 2702从数据库中取出数据封装成对象: package com. ... -
Contact 联系人封装
2010-11-12 16:42 1084Contact 需要的字段 private Strin ... -
android 中好用的时间工具-DateUtils
2010-10-14 11:07 2420DateUtils.isToday(timeMills) ? ... -
不要忘了BroadcastReceiver 注册的用法
2010-10-14 10:52 1430BroadcastReceiver 是用来接收广播意图的服务组 ... -
Contact 联系人中的一些重要信息
2010-10-08 16:26 1168首先应该知道联系人的信息都存放在data表中,其中主要的字段 ...
相关推荐
北京地区二手车置换、新车上牌流程详细指南 本资源详细介绍了北京地区二手车置换、新车上牌流程,涵盖了二手车置换的两种方法、旧机动车交易市场的交易方式、购车指标更新、新车上牌流程等相关知识点。 一、二手车...
在Android开发中,实现指定区域拍照、身份证拍照和银行卡拍照是一项常见的需求,主要应用于实名认证、支付验证等场景。为了实现这样的功能,开发者需要掌握以下几个关键知识点: 1. **权限申请**: 在Android系统...
基于Android平台的车辆牌照自动识别系统的实现 Android平台的车辆牌照自动识别系统是当前移动端上一个崭新的研究方向。为了更方便快捷地对非法和异常车辆进行稽查,开发了一套基于Android平台的车辆牌照自动识别...
北京地区二手车置换、购车指标更新、新车上牌流程 一、二手车置换 二手车置换是指将旧车卖掉,换取新车的过程。在北京地区,二手车置换有多种方法,以下是其中的两种: 方法一:去购车 4S 店直接置换新车。在这个...
代码文件要求在android2.1以上版本可用,可以实现android定位,显示出定位的经纬度,并且可显示出该经纬度所代表的街道地址,本代码主要是应用baidu进行定位,解决了google在大陆地区无牌照没法定位的问题。...
【作品名称】:基于OpenCV的汽车牌照识别 采用androidStudio构建 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: ...
在本文中,我们将深入探讨如何在Android Things平台上利用HyperLPR库实现车牌检测与识别的系统。Android Things是Google提供的一款物联网(IoT)操作系统,它允许开发者使用Android的开发工具和技能来构建智能设备。而...
车管所上牌预约流程.pdf
私家车上牌,快速指引新车上牌程序,提前准备所需资料,节省上牌时间及成本。
3. **车牌识别流程** - **图像采集**:首先,系统通过Android设备的摄像头捕获实时视频流或静态图像。 - **预处理**:对捕获的图像进行灰度化、二值化、边缘检测等操作,以提高车牌区域的识别效果。 - **车牌定位...
第一阶段:2005年,华为获得手机牌照,成为中国第一批获得牌照的厂商之一。 第二阶段:2005-2010年,华为手机销量增长迅速,2009年销量破百万大关,成为第一款破百万的国产Android智能手机。 第三阶段:2010年...
基于OpenCV的汽车牌照识别采用AndroidStudio构建源码+使用文档+全部资料(优秀项目).zip基于OpenCV的汽车牌照识别采用AndroidStudio构建源码+使用文档+全部资料(优秀项目).zip基于OpenCV的汽车牌照识别采用...
本课程的教学资源包括多媒体投影仪、计算机、照相机、汽车模型(带牌照)、报废的汽车零部件等。 八、教学设计 本课程的教学设计分为两个部分:课前准备和课堂教学。在课前准备中,教师根据本课的知识点和学生的...
在这个课程设计中,学生需要选取一个具体的题目,例如“汽车牌照管理系统”,来综合运用所学的数据结构、算法设计以及软件开发流程。 1. **数据结构的选择与应用**: - 在这个系统中,汽车记录可能以链式存储结构...
全国公共广播电台适用于Android的自动交通牌照识别器####说明基于OpenCV,SVM和Tesseract的Android车牌识别系统。 ####先决条件Android 2.3或更高版本西班牙语的培训文件[trained data file] [tessdata]。 建议使用V...
6、算法流程图:报告中还提供了算法流程图,包括main函数流程图、添加车辆函数SetList(p)流程图、排序子函数paixu(p)的流程图和查找子函数find(p)的流程图等,帮助读者更好地了解程序的执行过程。 7、文件读取:...