Android相机Camera基础知识
一、概述
本章节主要讲述的Android相机Camera的相关知识点,主要包含三个方面,Android启动系统相机生成缩略图、Android启动系统相机生成原图以及Android自定义相机等。
二、Android启动系统相机
核心代码:
packagecom.czhappy.camerademo.activity; importandroid.content.Intent; importandroid.graphics.Bitmap; importandroid.graphics.BitmapFactory; importandroid.net.Uri; importandroid.os.Bundle; importandroid.os.Environment; importandroid.provider.MediaStore; importandroid.support.v7.app.AppCompatActivity; importandroid.view.View; importandroid.widget.ImageView; importcom.czhappy.camerademo.R; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.IOException; publicclassMainActivityextendsAppCompatActivity{ privatestaticintREQ_1=1; privatestaticintREQ_2=2; privateImageViewimage_iv; privateStringmFilePath; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); image_iv=(ImageView)findViewById(R.id.image_iv); mFilePath=Environment.getExternalStorageDirectory().getPath(); mFilePath=mFilePath+"/"+System.currentTimeMillis()+".jpg"; } publicvoidstartCamera1(Viewview){ //隐式Intent调用 Intentit=newIntent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(it,REQ_1); } publicvoidstartCamera2(Viewview){ //隐式Intent调用 Intentit=newIntent(MediaStore.ACTION_IMAGE_CAPTURE); UriphotoUri=Uri.fromFile(newFile(mFilePath)); it.putExtra(MediaStore.EXTRA_OUTPUT,photoUri); startActivityForResult(it,REQ_2); } publicvoidcustomCamera(Viewview){ Intentit=newIntent(MainActivity.this,CustomCameraActivity.class); startActivity(it); } /** * *@paramrequestCode *@paramresultCode *@paramdata//缩略图 */ @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ super.onActivityResult(requestCode,resultCode,data); if(resultCode==RESULT_OK){ if(requestCode==REQ_1){//缩略图 Bundlebundle=data.getExtras(); Bitmapbmp=(Bitmap)bundle.get("data"); image_iv.setImageBitmap(bmp); }elseif(requestCode==REQ_2){//原图 FileInputStreamfis=null; try{ fis=newFileInputStream(mFilePath); Bitmapbitmap=BitmapFactory.decodeStream(fis); image_iv.setImageBitmap(bitmap); }catch(FileNotFoundExceptione){ e.printStackTrace(); }finally{ try{ fis.close(); }catch(IOExceptione){ e.printStackTrace(); } } } } } }
三、Android自定义相机
1.自定义相机步骤:
创建相机
创建SurfaceView
关联相机与SurfaceView
调整相机显示效果
自定义相机预览界面
2.核心代码:
自定义相机CustomCameraActivity.java
packagecom.czhappy.camerademo.activity; importandroid.content.Intent; importandroid.graphics.ImageFormat; importandroid.hardware.Camera; importandroid.os.Bundle; importandroid.support.v7.app.AppCompatActivity; importandroid.view.SurfaceHolder; importandroid.view.SurfaceView; importandroid.view.View; importcom.czhappy.camerademo.R; importjava.io.File; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; /** *Description: *User:chenzheng *Date:2016/12/270027 *Time:13:43 */ publicclassCustomCameraActivityextendsAppCompatActivityimplementsSurfaceHolder.Callback{ privateSurfaceViewmPreview; privateCameramCamera; privateSurfaceHoldermHolder; privateCamera.PictureCallbackmPictureCallback=newCamera.PictureCallback(){ @Override publicvoidonPictureTaken(byte[]data,Cameracamera){ FiletempFile=newFile("/sdcard/temp.png"); try{ FileOutputStreamfos=newFileOutputStream(tempFile); fos.write(data); fos.close(); Intentit=newIntent(CustomCameraActivity.this,CaptureResultActivity.class); it.putExtra("picPath",tempFile.getAbsolutePath()); startActivity(it); finish(); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } }; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom_camera); mPreview=(SurfaceView)this.findViewById(R.id.preview); mHolder=mPreview.getHolder(); mHolder.addCallback(this); //点击自动对焦 mPreview.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ mCamera.autoFocus(null);; } }); } /** *拍照 *@paramview */ publicvoidcapture(Viewview){ Camera.Parametersparameters=mCamera.getParameters(); parameters.setPictureFormat(ImageFormat.JPEG); parameters.setPictureSize(800,400); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//自动对焦 mCamera.autoFocus(newCamera.AutoFocusCallback(){ @Override publicvoidonAutoFocus(booleansuccess,Cameracamera){ //对焦准确拍摄照片 if(success){ mCamera.takePicture(null,null,mPictureCallback); } } }); } /** *获取相机对象 *@return */ privateCameragetCamera(){ mCamera=Camera.open(); returnmCamera; } /** *开始预览相机内容 */ privatevoidsetStartPreview(Cameracamera,SurfaceHolderholder){ try{ camera.setPreviewDisplay(holder); camera.setDisplayOrientation(90);//设置相机预览为竖屏90度 camera.startPreview(); }catch(IOExceptione){ e.printStackTrace(); } } /** *释放相机资源 */ privatevoidreleaseCamera(){ if(mCamera!=null){ mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); mCamera=null; } } @Override protectedvoidonResume(){ super.onResume(); if(mCamera==null){ mCamera=getCamera(); if(mHolder!=null){ setStartPreview(mCamera,mHolder); } } } @Override protectedvoidonPause(){ super.onPause(); releaseCamera(); } @Override publicvoidsurfaceCreated(SurfaceHolderholder){ setStartPreview(mCamera,mHolder); } @Override publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){ mCamera.stopPreview(); setStartPreview(mCamera,mHolder); } @Override publicvoidsurfaceDestroyed(SurfaceHolderholder){ releaseCamera(); } }
生成图片结果页面CaptureResultActivity.java
packagecom.czhappy.camerademo.activity; importandroid.graphics.Bitmap; importandroid.graphics.BitmapFactory; importandroid.graphics.Matrix; importandroid.os.Bundle; importandroid.support.v7.app.AppCompatActivity; importandroid.widget.ImageView; importcom.czhappy.camerademo.R; importjava.io.FileInputStream; importjava.io.FileNotFoundException; /** *Description: *User:chenzheng *Date:2016/12/300030 *Time:13:27 */ publicclassCaptureResultActivityextendsAppCompatActivity{ privateStringpicPath; privateImageViewresult_iv; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_capture_result); picPath=getIntent().getStringExtra("picPath"); result_iv=(ImageView)findViewById(R.id.result_iv); try{ FileInputStreamfis=newFileInputStream(picPath); Bitmapbitmap=BitmapFactory.decodeStream(fis); Matrixmatrix=newMatrix(); matrix.setRotate(90);//旋转90度矩阵 bitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true); result_iv.setImageBitmap(bitmap); }catch(FileNotFoundExceptione){ e.printStackTrace(); } } }
四、项目源代码下载
http://xiazai.jb51.net/201701/yuanma/AndroidCamera(jb51.net).rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。