android摄像头开发
来源:互联网 发布:php文件上传 编辑:程序博客网 时间:2024/05/18 00:28
github 当前下载地址:https://github.com/Arikes/CameraAndroid.git
类 MResource
package com.example.camerademo;import android.content.Context;public class MResource {public static int getIdByName(Context context, String className, String name) {String packageName = context.getPackageName();Class r = null;int id = 0;try {r = Class.forName(packageName + ".R");Class[] classes = r.getClasses();Class desireClass = null;for (int i = 0; i < classes.length; ++i) {if (classes[i].getName().split("\\$")[1].equals(className)) {desireClass = classes[i];break;}}if (desireClass != null)id = desireClass.getField(name).getInt(desireClass);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();}return id;}}
资源单位类MediaItem
package com.example.camerademo;import org.json.JSONException;import org.json.JSONObject;public class MediaItem {public enum MediaType { PHOTO, MOVIE } ;public static final String MEDIA_ITEM="media_item";private static final String ITEM_NAME="itemName";private static final String ITEM_PATH="itemPath";private static final String ITEM_ICONPATH="iconPath";private static final String ITEM_MEDIATYPE="mediaType";private String m_itemname;private String m_itempath;private String m_iconpath;private MediaType m_mediaType;public MediaItem(String itemname,String itempath,String iconpath,MediaType mediaType){m_itemname=itemname;m_itempath=itempath;m_iconpath=iconpath;m_mediaType=mediaType;}public String getItemname() {return m_itemname;}public void setItemname(String itemname) {m_itemname = itemname;}public String getItempath() {return m_itempath;}public void setItempath(String itempath) {m_itempath = itempath;}public String getIconpath() {return m_iconpath;}public void setIconpath(String iconpath) {m_iconpath = iconpath;}public MediaType getMediaType() {return m_mediaType;}public void setMediaType(MediaType mediaType) {m_mediaType = mediaType;}public JSONObject toJson() throws JSONException{JSONObject json = new JSONObject();json.put(ITEM_NAME, m_itemname);json.put(ITEM_PATH, m_itempath);json.put(ITEM_ICONPATH, m_iconpath);json.put(ITEM_MEDIATYPE, m_mediaType);return json;}}
主类CameraCtr
package com.example.camerademo;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Timer;import java.util.TimerTask;import org.json.JSONArray;import org.json.JSONException;import com.example.camerademo.MediaItem.MediaType;import android.app.Activity;import android.content.Intent;import android.graphics.Rect;import android.hardware.Camera;import android.hardware.Camera.Parameters;import android.media.CamcorderProfile;import android.media.MediaRecorder;import android.os.Build;import android.os.Bundle;import android.os.Environment;import android.os.SystemClock;import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.View.OnTouchListener;import android.widget.Button;import android.widget.Chronometer;import android.widget.ImageButton;public class CameraCtr extends Activity{public static final String TAG="CameraCtr";private ArrayList<MediaItem> mMedialist;private Camera mCamera;private SurfaceView mSurfaceView;private SurfaceHolder holder;private ImageButton mTake;private ImageButton mPosition;private ImageButton mRecord;private ImageButton mFlash;private ImageButton mZoom;private Chronometer mRecordTimer;private MediaRecorder mMediaRecorder;private ImageButton mStopRecord;private Button mMediaCount;private boolean bVidoMode;private boolean bFront;private boolean hasflash;private boolean bRecording;private int curZoom;private int mediaCount;private float startX = 0.0f,startY = 0.0f,endX = 0.0f,endY = 0.0f;private Camera.ShutterCallback mShutterCallback = new Camera.ShutterCallback() {@Overridepublic void onShutter() {// TODO Auto-generated method stub}};private Camera.PictureCallback mJpegCallback = new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {// TODO Auto-generated method stubString filename = "pic_"+newfilename()+".jpg";//File file = new File(Environment.getExternalStoragePublicDirectory(//Environment.DIRECTORY_DCIM), filename);FileOutputStream os = null;boolean success = true;try{os =CameraCtr.this.openFileOutput(filename,MODE_PRIVATE); File mRecAudioFile = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM).getPath().toString()+File.separator+"moVdo"+File.separator+filename);//File mRecAudioFile= new File(dir.getAbsolutePath()+File.separator+filename); FileOutputStream fops = new FileOutputStream(mRecAudioFile); fops.write(data); fops.close();}catch(Exception e){Log.e(TAG, "ERRER WRITE to file "+filename,e);success = false;}if(success){Log.i(TAG, "JPEG saved at : "+filename);mediaCount++;mMediaCount.setText(String.valueOf(mediaCount));}MediaItem mediaitem= new MediaItem(filename,Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM).getPath().toString()+File.separator+"moVdo"+File.separator+filename,Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM).getPath().toString()+File.separator+"moVdo"+File.separator+filename,MediaType.PHOTO);mMedialist.add(mediaitem);Log.i(TAG, getApplicationContext().getFilesDir().getAbsolutePath());Log.i(TAG, getApplicationContext().getPackageResourcePath());mCamera.startPreview();}};@Overridepublic void onCreate(Bundle savedInstanceState){mediaCount=0;bFront = false;hasflash = false;bRecording=false;bVidoMode = true;curZoom = 1;mMedialist = new ArrayList<MediaItem>();super.onCreate(savedInstanceState);//setContentView(R.layout.activity_camera);setContentView(MResource.getIdByName(getApplication(), "layout", "activity_camera"));//Environment.getExternalStorageDirectory().getPath()//File fileString albumName="moVdo";File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), albumName);if(!dir.exists())if(!dir.mkdir())Log.e(TAG, "don't create dir");elseLog.i(TAG, "DIR is created");mRecordTimer = (Chronometer)findViewById(MResource.getIdByName(getApplication(), "id", "recordTimer"));if(bVidoMode)mRecordTimer.setVisibility(0x00000000);mMediaCount=(Button)findViewById(MResource.getIdByName(getApplication(), "id", "media_count"));//mTake = (ImageButton)findViewById(R.id.cameraBut);mTake = (ImageButton)findViewById(MResource.getIdByName(getApplication(), "id", "cameraBut"));mTake.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stub if(event.getAction() == MotionEvent.ACTION_DOWN){ //更改为按下时的背景图片 v.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cswitch")); }else if(event.getAction() == MotionEvent.ACTION_UP){ //改为抬起时的图片 v.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cswitch_down")); } return false;}});mTake.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//mCamera.takePicture(mShutterCallback, null, mJpegCallback);if(bRecording)return;bVidoMode = !bVidoMode;if(bVidoMode){mRecordTimer.setVisibility(0x00000000);mRecord.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cvideo"));}else{mRecordTimer.setVisibility(0x00000004);//0x00000004mRecord.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cphoto"));}}});//mFlash =(ImageButton)findViewById(R.id.cameraFlash);mFlash = (ImageButton)findViewById(MResource.getIdByName(getApplication(), "id", "cameraFlash"));//if(hasflash)//mFlash.setText(MResource.getIdByName(getApplication(), "string", "flashlight_on"));//else//mFlash.setText(MResource.getIdByName(getApplication(), "string", "flashlight_off"));mFlash.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubif(hasflash)turnOfflight();elseturnOnlight();hasflash=!hasflash;//if(hasflash)//mFlash.setText(MResource.getIdByName(getApplication(), "string", "flashlight_on"));//else//mFlash.setText(MResource.getIdByName(getApplication(), "string", "flashlight_off"));}});//mZoom = (ImageButton)findViewById(R.id.cameraZoom);mZoom = (ImageButton)findViewById(MResource.getIdByName(getApplication(), "id", "cameraZoom"));mZoom.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stub if(event.getAction() == MotionEvent.ACTION_DOWN){ //更改为按下时的背景图片 v.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cback_down")); }else if(event.getAction() == MotionEvent.ACTION_UP){ //改为抬起时的图片 v.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cback")); } return false; }});//mZoom.setText(String.valueOf(curZoom));mZoom.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//setZoom();finish();}});//mPosition = (ImageButton)findViewById(R.id.cameraPosition);mPosition = (ImageButton)findViewById(MResource.getIdByName(getApplication(), "id", "cameraPosition"));mPosition.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint camera_num = Camera.getNumberOfCameras();if(camera_num<=1)return;mCamera.stopPreview();mCamera.release();mCamera = null;try{if(bFront)mCamera = Camera.open(0);elsemCamera = Camera.open(1);}catch(Exception e){mCamera.stopPreview();mCamera.release();mCamera = null;return;}bFront=!bFront;try {mCamera.setPreviewDisplay(holder);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}Camera.Parameters parameters = mCamera.getParameters();if(parameters==null)return ;int maxZoom=parameters.getMaxZoom();curZoom=parameters.getZoom();mCamera.setParameters(parameters);mCamera.startPreview();}});//mRecord = (ImageButton)findViewById(R.id.cameraRecord);mRecord = (ImageButton)findViewById(MResource.getIdByName(getApplication(), "id", "cameraRecord"));if(bVidoMode)mRecord.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cvideo"));elsemRecord.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cphoto"));mRecord.setOnClickListener(new View.OnClickListener() {private File mRecAudioFile;@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubif(bVidoMode){if(bRecording){//is recording ,need to stop//if(mediaCount<=2)//return;mMediaRecorder.stop();mRecordTimer.stop();mMediaRecorder.reset();mMediaRecorder.release();mCamera.lock();bRecording=false;mRecord.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cvideo"));mPosition.setEnabled(!bRecording);}else{//could start record movieprepareVideoRecorder();mMediaRecorder.start();bRecording=true;mPosition.setEnabled(!bRecording);mRecordTimer.setBase(SystemClock.elapsedRealtime());mRecordTimer.start();mRecord.setBackgroundResource(MResource.getIdByName(getApplication(), "drawable", "cvideopress"));}}else{mCamera.takePicture(mShutterCallback, null, mJpegCallback);}}});//mSurfaceView = (SurfaceView)findViewById(R.id.camera_surfaceView);mSurfaceView = (SurfaceView)findViewById(MResource.getIdByName(getApplication(), "id", "camera_surfaceView"));mSurfaceView.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stub if (event.getAction()==MotionEvent.ACTION_DOWN) { startX=event.getX(); startY = event.getY(); Log.d("aaa", "down pressed"); return true; } else if(event.getAction()==MotionEvent.ACTION_MOVE) { Log.i(TAG, Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM).getPath().toString()); endX=event.getX(); endY=event.getY(); Log.d("curVAlue", "startX:"+(String.valueOf(startX))+"startY:"+String.valueOf(startY)); Log.d("curVAlue", "endX:"+(String.valueOf(endX))+"endY:"+String.valueOf(endY)); if(endY>startY) zoomSub(); else zoomAdd(); return true; } else if(event.getAction()==MotionEvent.ACTION_UP) { endX=event.getX(); endY=event.getY(); if(startX==endX && startY==endY) { if (mCamera != null) { Rect rect = new Rect(); rect.set((int)startX-15, (int)startY-15, (int)startX+15, (int)(startY+15)); Parameters parameters = mCamera.getParameters(); parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO); // parameters.setFocusAreas(Lists.newArrayList(new Camera.Area(rect, 500))); mCamera.setParameters(parameters); mCamera.autoFocus(null); } } return true; } return true;}});holder = mSurfaceView.getHolder();holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);holder.addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {// TODO Auto-generated method stubif(mCamera != null)mCamera.stopPreview();}//@Overridepublic void surfaceCreated(SurfaceHolder arg0) {// TODO Auto-g/ enerated method stubtry{if(mCamera != null){mCamera.setPreviewDisplay(holder);}}catch (IOException exception){Log.e(TAG, "eRRER setting up preview display",exception);}}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stubif(mCamera == null) return;mCamera.startPreview();}});}@Overridepublic void onResume(){bRecording=false;Intent data = new Intent();data.putExtra(TAG, 1);this.setResult(1, data);super.onResume();if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD){try{if(!bFront){mCamera = Camera.open(0);}else{mCamera = Camera.open(1);}}catch(Exception e){return;}}else{try{mCamera = Camera.open();}catch(Exception e){return ;}if(mCamera == null)return;}}@Overridepublic void onPause(){try {toJson();} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}super.onPause();if(mCamera != null){mCamera.release();mCamera = null;}}private boolean prepareVideoRecorder(){String albumName="moVdo";File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), albumName);if(!dir.exists())if(!dir.mkdir())Log.e(TAG, "don't create dir");elseLog.i(TAG, "DIR is created");if(mCamera != null){ mCamera.unlock();mMediaRecorder = new MediaRecorder();mMediaRecorder.reset(); mMediaRecorder.setCamera(mCamera); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); if(!bFront) mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); else mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW)); String filename ="video"+newfilename()+".mp4"; mMediaRecorder.setOutputFile(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM).getPath().toString()+File.separator+"moVdo"+File.separator+filename);MediaItem mediaitem= new MediaItem(filename,Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM).getPath().toString()+File.separator+"moVdo"+File.separator+filename,Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM).getPath().toString()+File.separator+"moVdo"+File.separator+filename,MediaType.MOVIE);mediaCount++;mMediaCount.setText(String.valueOf(mediaCount));mMedialist.add(mediaitem); mMediaRecorder.setPreviewDisplay(holder.getSurface()); try { mMediaRecorder.prepare(); } catch (IllegalStateException e) { Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage()); mMediaRecorder.stop(); mMediaRecorder.reset(); mMediaRecorder.release(); mCamera.lock(); return false; } catch (IOException e) { Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); mMediaRecorder.stop(); mMediaRecorder.reset(); mMediaRecorder.release(); mCamera.lock(); return false; } return true; }return false;}public void turnOnlight(){if(bFront)return;if(mCamera != null){Camera.Parameters parameters = mCamera.getParameters();if(parameters ==null)return;List<String> flashModes = parameters.getSupportedFlashModes();String flashMode = parameters.getFlashMode();if(flashMode==null)return;if (!Parameters.FLASH_MODE_TORCH.equals(flashMode)) {// Turn on the flashif (flashModes.contains(Parameters.FLASH_MODE_TORCH)){parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);mCamera.setParameters(parameters);} else {}}}}public void turnOfflight(){if(bFront)return;if(mCamera != null){Camera.Parameters parameters = mCamera.getParameters();if(parameters ==null)return;List<String> flashModes = parameters.getSupportedFlashModes();String flashMode = parameters.getFlashMode();if(flashMode==null)return;if (!Parameters.FLASH_MODE_OFF.equals(flashMode)) {// Turn on the flashif (flashModes.contains(Parameters.FLASH_MODE_OFF)) {parameters.setFlashMode(Parameters.FLASH_MODE_OFF);mCamera.setParameters(parameters);} else {Log.e(TAG, "FLASH_MODE_OFF not supported");}}}}public void zoomAdd(){if(mCamera ==null)return;Camera.Parameters parameters = mCamera.getParameters();if(parameters==null)return;int maxZoom=parameters.getMaxZoom();int curZoom=parameters.getZoom();if(curZoom<maxZoom){curZoom++;parameters.setZoom(curZoom);mCamera.setParameters(parameters);return;}}public void zoomSub(){if(mCamera ==null)return;Camera.Parameters parameters = mCamera.getParameters();if(parameters==null)return;int curZoom=parameters.getZoom();if(curZoom>1){curZoom--;parameters.setZoom(curZoom);mCamera.setParameters(parameters);return;}}private void setFocus(boolean bFocus){if(mCamera!=null){Camera.Parameters parameters = mCamera.getParameters();if(bFocus)parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);elseparameters.setFocusMode(Parameters.FOCUS_MODE_MACRO);;//parameters.setFocusAreas(focusAreas);//parameters.setFocusMode();mCamera.setParameters(parameters);}}private boolean toJson() throws JSONException{String filename = "movdoMedia.js";boolean success = false;try{ File mJsonFile = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM).getPath().toString()+File.separator+"moVdo"+File.separator+filename); FileOutputStream fops = new FileOutputStream(mJsonFile); JSONArray js_mediaArray= new JSONArray(); if(mMedialist.isEmpty()) { fops.write(js_mediaArray.toString().getBytes()); fops.close(); return true; } for(MediaItem item:mMedialist) { js_mediaArray.put(item.toJson()); } fops.write(js_mediaArray.toString().getBytes()); fops.close();}catch(Exception e){Log.e(TAG, "ERRER WRITE to file "+filename,e);success = false;}return true;}private String newfilename(){SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");String str=new String();str=df.format(new Date());return str;}}
按钮 圆形配置文件
<?xml version="1.0" encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><!-- 填充的颜色 --><solid android:color="#F5FFFA"/><!-- 设置按钮的四个角为弧形 --><!-- android:radius 弧形的半径 --><corners android:radius="360dip"/><!-- padding: Button 里面的文字与Button边界的间隔 --><paddingandroid:left="10dp"android:top="10dp"android:right="10dp"android:bottom="10dp"/></shape>
0 0
- Android开发之摄像头
- android摄像头开发
- Android 摄像头开发
- Android手机摄像头作为PC摄像头开发
- android开发笔记 -摄像头开发
- Android开发之摄像头操作
- android手机下开发摄像头拍摄
- android+unity游戏开发之摄像头切换
- Android开发日志 摄像头视频流捕获
- Android下的摄像头驱动开发
- Android多媒体应用开发-控制摄像头拍照
- Android开发日志 摄像头视频流捕获
- android摄像头开发之完美demo
- Android开发中调用摄像头功能详解
- Android下的摄像头驱动开发
- Android多媒体应用开发-控制摄像头拍照
- Android研究之游戏开发摄像头更新
- Android开发之控制摄像头拍照
- 第四周项目3 单链表应用3
- linq to sql 上传,显示图片
- 关于Office Web Apps服务是否正常运行的测试方法
- 第十六周实践项目1—验证算法(4)堆排序
- 第十六周--验证算法(堆排序)
- android摄像头开发
- 虚函数在笔试中的题型
- 第十六周项目2希尔排序
- 卷积神经网络
- 十六周 项目1希尔排序
- hdoj5597GTW likes function【找规律+欧拉函数】
- 项目1.6 基数排序
- 百度实习生面试经历
- Asio驱动开发学习笔记(2)