| 查看: 1833 | 回复: 7 | ||||
qqhegg荣誉版主 (文坛精英)
珊瑚小美-----小元家的九妹
|
[交流]
android 学习笔记--------camera 已有5人参与
|
|
最近学习android照相机,我所说的是自定义相机而不是调用系统自带的相机功能 android的camera其实十分的简单 1.想要进行camera的自定义,首先必须使用surfaceView画布,并且需要继承surfaceHolder callback 2.然后我们会看到一下三个部分:surfaceChanged.surfaceCreated,和surfaceDestroyed。 3.然后进行代码的关键部分的编写 首先我们需要初始化相机,在surfaceChanged进行 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { //定义参数 Camera.Parameters parameters = mCamera.getParameters(); //设置照片的格式 parameters.setPictureFormat(PixelFormat.JPEG); //设置照片的大小,对于高版本的相机不用推荐直接设置,因为相机可能不支持下面讨论 parameters.setPictureSize(320, 480); //这句对于2.2以下必须,2.3不需要这句 mCamera.setParameters(parameters); //开始预览 mCamera.startPreview(); } 在surfaceCreated部分需要进行判断 public void surfaceCreated(SurfaceHolder holder) { if(!IspreView) { mCamera = Camera.open(); //对于这个部分经常会出错,从android API上我们可以发现2.2的是这种语法,但是对于2.3,它还添加了Camera.open(int id);对于这个id提供了一个范围,我一般采用0,但是很多时候还是会报错,具体原因不祥 } try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { mCamera.release(); mCamera = null; } 在这边一定要释放掉相机资源,不然相机在返回以后再拍照时,非常有可能会报错,我经常把资源释放放在catch语句的后面。 try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { } mCamera.release(); mCamera = null; } 对于surfaceDestroyed部分十分简单 public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mCamera = null; } 4.如何进行拍照呢 一般情况下是调用camera的takepicture函数 public boolean onKeyUp(int keyCode, KeyEvent event) { // TODO Auto-generated method stub switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: mPreview.takePicture(); break; } return true; } takepicture一共有3个参数 前面的2个可以设置为null 最后一个参数最重要下面的代码是将我们拍照的图片保存起来 private PictureCallback jpegCallback = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { cameraBitmap = BitmapFactory.decodeByteArray(data, 0, data.length); File myCaptureFile = new File("/sdcard/camera/camera1.jpg" ; try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); cameraBitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); Canvas canvas = mHolder.lockCanvas(); canvas.drawBitmap(cameraBitmap, 0, 0, null); mHolder.unlockCanvasAndPost(canvas); } catch (Exception e) { e.getStackTrace(); } } }; 因为我做的是一个小项目,camera只是其中一个部分,所以学习是参考网上的代码进行。现在把链接给出来http://www.cnblogs.com/chiefCTO/archive/2011/09/27/2193637.html 这是博客园的链接,欢迎大家共同探讨和研究 对于camera这个部分有很多的问题存在,比如资源,比如打开语句,大家实际应用时就会发现,希望可以一起探讨呵呵 |
» 收录本帖的淘帖专辑推荐
android学习笔记 |
» 本帖已获得的红花(最新10朵)
» 猜你喜欢
职称评审没过,求安慰
已经有41人回复
回收溶剂求助
已经有7人回复
硝基苯如何除去
已经有3人回复
A期刊撤稿
已经有4人回复
垃圾破二本职称评审标准
已经有17人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有22人回复
EST投稿状态问题
已经有7人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
求助文献
已经有3人回复
三无产品还有机会吗
已经有6人回复
» 本主题相关价值贴推荐,对您同样有帮助:
android学习笔记----ZXing(一)
已经有9人回复
14本经典android开发教程
已经有16人回复
android学习笔记系列25---service初步
已经有4人回复
android学习笔记-----系列2
已经有5人回复
3D图形编程指南andAndroidAPI教程【转载】
已经有10人回复
Android手机到底需不需要root???让我们一起来揭开你的真相!!!
已经有25人回复
【分享】Android开发指南中文版【已搜索无重复】
已经有32人回复
【分享】辛苦收集的Android桌面和系统美化软件【已搜索无重复】
已经有43人回复
Android入门到精通详解
已经有18人回复
Android开发教程&笔记.pdf
已经有11人回复
丁香园用药助手(iphone,android,ipad)
已经有6人回复
有机化学笔记(王积涛第二版)
已经有685人回复

送鲜花一朵
|
2楼2012-03-19 21:47:05
qqhegg
荣誉版主 (文坛精英)
珊瑚小美-----小元家的九妹
- 程序强帖: 2
- 应助: 10 (幼儿园)
- 贵宾: 3.115
- 金币: 23915.9
- 散金: 14806
- 红花: 179
- 沙发: 138
- 帖子: 11542
- 在线: 770.7小时
- 虫号: 1212338
- 注册: 2011-02-24
- 性别: MM
- 管辖: 基金申请交流

3楼2012-03-19 21:47:47
jinghua88888
木虫 (职业作家)
梦未央
- 应助: 17 (小学生)
- 金币: 634.3
- 散金: 4824
- 红花: 28
- 沙发: 17
- 帖子: 3220
- 在线: 400.2小时
- 虫号: 997485
- 注册: 2010-04-15
- 专业: 金融工程

4楼2012-03-19 23:11:28

5楼2012-03-20 09:08:29
qqhegg
荣誉版主 (文坛精英)
珊瑚小美-----小元家的九妹
- 程序强帖: 2
- 应助: 10 (幼儿园)
- 贵宾: 3.115
- 金币: 23915.9
- 散金: 14806
- 红花: 179
- 沙发: 138
- 帖子: 11542
- 在线: 770.7小时
- 虫号: 1212338
- 注册: 2011-02-24
- 性别: MM
- 管辖: 基金申请交流

6楼2012-03-20 09:54:41

7楼2012-03-20 16:56:20
8楼2012-03-22 12:47:48













;
回复此楼
不懂,好高深