24小时热门版块排行榜    

查看: 2360  |  回复: 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朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

每天都是新的一天,每天上帝都会给你不同的惊喜
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
送鲜花一朵
2楼2012-03-19 21:47:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qqhegg

荣誉版主 (文坛精英)

珊瑚小美-----小元家的九妹

优秀版主优秀版主

引用回帖:
2楼: Originally posted by 林夕梦 at 2012-03-19 21:47:05:

呵呵
每天都是新的一天,每天上帝都会给你不同的惊喜
3楼2012-03-19 21:47:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jinghua88888

木虫 (职业作家)

梦未央

不懂,好高深
Own Your Future!
4楼2012-03-19 23:11:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gujing136

禁虫 (文坛精英)

你太强了,小美··
叫老猫的兔子
5楼2012-03-20 09:08:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qqhegg

荣誉版主 (文坛精英)

珊瑚小美-----小元家的九妹

优秀版主优秀版主

引用回帖:
5楼: Originally posted by gujing136 at 2012-03-20 09:08:29:
你太强了,小美··

oh ,no
每天都是新的一天,每天上帝都会给你不同的惊喜
6楼2012-03-20 09:54:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chzcyz

铜虫 (初入文坛)

学习学习!~~
己所不欲,勿施于人
7楼2012-03-20 16:56:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

rish

木虫 (小有名气)

很强很强啊
8楼2012-03-22 12:47:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 qqhegg 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +28 医学老男孩 2026-08-13 59/2950 2026-08-15 19:38 by pztchina
[基金申请] filecode=后面第一个是大写字母 +4 wangze12014 2026-08-14 5/250 2026-08-15 19:31 by pztchina
[基金申请] 时间戳又变了8-15 +12 archvillain 2026-08-15 21/1050 2026-08-15 19:30 by pztchina
[基金申请] 关于Filecode分析方法 +10 majunge000 2026-08-10 13/650 2026-08-15 12:26 by hanpeng972
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 22/1100 2026-08-14 23:45 by Noways
[基金申请] 是这周出结果还是下周出结果? +4 yuleib84 2026-08-11 4/200 2026-08-14 23:05 by lfy8008
[基金申请] 奇怪,两个人的filecode固定段从头到尾一模一样 +8 布布和一二 2026-08-10 11/550 2026-08-14 14:58 by Equinoxhua
[基金申请] 应该是93bebmhtak前后十一个字符比较关键 +23 Lanmanbaby 2026-08-09 37/1850 2026-08-14 13:40 by Equinoxhua
[硕博家园] 请教兼职经验 +3 是阿文鸭 2026-08-09 3/150 2026-08-14 12:07 by HER12025
[硕博家园] 读博的好处 +4 lnee 2026-08-11 4/200 2026-08-14 10:20 by ahsoarli
[基金申请] filecode +15 documentary 2026-08-10 17/850 2026-08-14 10:08 by kissu88
[基金申请] FileCode能看出啥? +10 要乐观耀哥 2026-08-10 32/1600 2026-08-14 09:37 by 要乐观耀哥
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +10 家与远方 2026-08-10 15/750 2026-08-14 02:08 by 绵羊哥哥
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[基金申请] 为什么网上很多人说本周 12号出结果 +6 瞬息宇宙 2026-08-10 7/350 2026-08-11 19:25 by Tide man
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 据悉今年马上要出结果了 +7 瞬息宇宙 2026-08-10 8/400 2026-08-10 12:42 by Vivilian
[基金申请] 面上项目filecode邪修 +5 西山十月 2026-08-09 7/350 2026-08-10 07:32 by 仁砚薪传
信息提示
请填处理意见