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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。