24小时热门版块排行榜    

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

» 猜你喜欢

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

每天都是新的一天,每天上帝都会给你不同的惊喜
已阅   回复此楼   关注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 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见