Camera基本开发知识

来源:互联网 发布:php大牛的博客 编辑:程序博客网 时间:2024/06/07 05:00

加权限;如API23及以上,要请求权限

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.CAMERA" />

这里写图片描述
1:调用系统相机

  Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);       startActivityForResult(intent, REQ_1);

2:调用系统拍照,并把图片存在特定文件夹

 private String mFilePath;        mFilePath= Environment.getExternalStorageDirectory().getPath();        mFilePath=mFilePath+"/"+"temp.png"; Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        //将拍的图片存在这个路径下        Uri photoUri=Uri.fromFile(new File(mFilePath));        intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);        startActivityForResult(intent, REQ_2);

拍照结束回调:

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        FileInputStream fis=null;        if(resultCode==RESULT_OK){            if(requestCode==REQ_1){                Bundle bundle=data.getExtras();                Bitmap bit= (Bitmap) bundle.get("data");                iv.setImageBitmap(bit);            }else if(requestCode==REQ_2){                try {                     fis=new FileInputStream(mFilePath);                    Bitmap bitmap= BitmapFactory.decodeStream(fis);                    iv.setImageBitmap(bitmap);                } catch (FileNotFoundException e) {                    e.printStackTrace();                }finally {                    try {                        fis.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }    }

3:自定义相机拍照
onResume()中获取相机并绑定surfaceView,开启预览

 @Override    protected void onResume() {        super.onResume();        if(mCamera==null){            mCamera=getCamera();            if (mHolder!=null){                setStartPreview(mCamera,mHolder);            }        }    } /**     * 获取系统camera对象     * @return     */    private Camera getCamera(){        Camera camera=null;    try {       camera=Camera.open();    }catch (Exception e){        camera=null;        e.printStackTrace();    }       return camera;    } //实时预览相机图像    private void setStartPreview(Camera camera,SurfaceHolder holder){        try {            camera.setPreviewDisplay(holder);//将相机与surfaceView控件绑定            camera.setDisplayOrientation(90);//将相机试图旋转90度,因为默认是横屏显示            camera.startPreview();        } catch (IOException e) {            e.printStackTrace();        }    }

当点击拍照的时候:

   //点击事件    public void capture(View view){        Camera.Parameters parameters=mCamera.getParameters();//参数        parameters.setPictureFormat(ImageFormat.JPEG);        parameters.setPictureSize(800, 400);        parameters.setFlashMode(Camera.Parameters.FOCUS_MODE_AUTO);//自动对焦        mCamera.autoFocus(new Camera.AutoFocusCallback() {            @Override            public void onAutoFocus(boolean success, Camera camera) {                if (success) {                    camera.takePicture(null, null, pictureCallback);                }            }        });    }//拍照之后回调取数据private Camera.PictureCallback pictureCallback=new Camera.PictureCallback() {        @Override        public void onPictureTaken(byte[] data, Camera camera) {            File file=new File("/sdcard/temp.png");            try {                FileOutputStream fos=new FileOutputStream(file);                fos.write(data);                fos.close();                Intent intent =new Intent(CustomActivity.this,ResultActivity.class);                intent.putExtra("picpath",file.getAbsolutePath());                startActivity(intent);                CustomActivity.this.finish();            } catch (FileNotFoundException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }        }    };

完整代码如下

public class CustomActivity extends AppCompatActivity implements SurfaceHolder.Callback {    private SurfaceView mSview;    private Camera mCamera;    private SurfaceHolder mHolder;    private Camera.PictureCallback pictureCallback=new Camera.PictureCallback() {        @Override        public void onPictureTaken(byte[] data, Camera camera) {            File file=new File("/sdcard/temp.png");            try {                FileOutputStream fos=new FileOutputStream(file);                fos.write(data);                fos.close();                Intent intent =new Intent(CustomActivity.this,ResultActivity.class);                intent.putExtra("picpath",file.getAbsolutePath());                startActivity(intent);                CustomActivity.this.finish();            } catch (FileNotFoundException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.custom);        initView();        mHolder=mSview.getHolder();        mHolder.addCallback(this);    }    private void initView() {        mSview= (SurfaceView) findViewById(R.id.preView);        mSview.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mCamera.autoFocus(null);//点击自动对焦            }        });    }    @Override    protected void onResume() {        super.onResume();        if(mCamera==null){            mCamera=getCamera();            if (mHolder!=null){                setStartPreview(mCamera,mHolder);            }        }    }    @Override    protected void onPause() {        super.onPause();        releaseCamera();    }     //点击事件    public void capture(View view){        Camera.Parameters parameters=mCamera.getParameters();//参数        parameters.setPictureFormat(ImageFormat.JPEG);        parameters.setPictureSize(800, 400);        parameters.setFlashMode(Camera.Parameters.FOCUS_MODE_AUTO);//自动对焦        mCamera.autoFocus(new Camera.AutoFocusCallback() {            @Override            public void onAutoFocus(boolean success, Camera camera) {                if (success) {                    camera.takePicture(null, null, pictureCallback);                }            }        });    }    /**     * 获取系统camera对象     * @return     */    private Camera getCamera(){        Camera camera=null;    try {       camera=Camera.open();    }catch (Exception e){        camera=null;        e.printStackTrace();    }       return camera;    }    //实时预览相机图像    private void setStartPreview(Camera camera,SurfaceHolder holder){        try {            camera.setPreviewDisplay(holder);//将相机与surfaceView控件绑定            camera.setDisplayOrientation(90);//将相机试图旋转90度,因为默认是横屏显示            camera.startPreview();        } catch (IOException e) {            e.printStackTrace();        }    }    //释放相机资源    private void releaseCamera(){        if(mCamera!=null){            mCamera.setPreviewCallback(null);            mCamera.stopPreview();            mCamera.release();            mCamera=null;        }    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        setStartPreview(mCamera, mHolder);    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            mCamera.stopPreview();            setStartPreview(mCamera, mHolder);    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        releaseCamera();    }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="30">        <SurfaceView            android:id="@+id/preView"            android:layout_width="match_parent"            android:layout_height="match_parent"            />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="水印"            android:textColor="#f6424a"            android:textSize="20sp"            android:layout_marginBottom="61dp"            android:layout_alignParentBottom="true"            android:layout_centerHorizontal="true" />    </RelativeLayout>    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="capture"        android:onClick="capture"/></LinearLayout>
public class ResultActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_result);        String path=getIntent().getStringExtra("picpath");       // Bitmap bitmap= BitmapFactory.decodeFile(path);        ImageView iv= (ImageView) findViewById(R.id.pic);        //iv.setImageBitmap(bitmap);        try {            FileInputStream fis=new FileInputStream(path);            Bitmap bit = BitmapFactory.decodeStream(fis);            Matrix mat=new Matrix();            mat.setRotate(90);         //把原来当位图旋转90度            bit=Bitmap.createBitmap(bit,0,0,bit.getWidth(),bit.getHeight(),mat,true);            iv.setImageBitmap(bit);        } catch (FileNotFoundException e) {            e.printStackTrace();        }    }}
1 0
原创粉丝点击