android之制作拍照

来源:互联网 发布:淘宝剩余时间 编辑:程序博客网 时间:2024/05/17 07:55

1.xml代码(2个控件)

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.cookie.android0721takephone.CameraActivity">    <SurfaceView        android:layout_width="match_parent"        android:layout_height="500dp"        android:id="@+id/sv_camera_surface"        />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="takePhoto"/></LinearLayout>

2.java代码

package com.example.cookie.android0721takephone;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.PixelFormat;import android.hardware.Camera;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Calendar;public class CameraActivity extends AppCompatActivity {    private SurfaceView sv_main_surface;    private Camera camera;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_camera);        sv_main_surface = (SurfaceView) findViewById(R.id.sv_camera_surface);        //添加回调函数        sv_main_surface.getHolder().addCallback(new SurfaceHolder.Callback() {            @Override            public void surfaceCreated(SurfaceHolder holder) {                //打开照相机                camera = Camera.open();                //设置摄像参数列表                 Camera.Parameters parameters= camera.getParameters();                //照片的输出格式                parameters.setPictureFormat(PixelFormat.JPEG);                parameters.set("jpeg-quality",100);                camera.setParameters(parameters);                //开启预览效果                camera.startPreview();                //将画面展示到surfaceView                try {                    camera.setPreviewDisplay(sv_main_surface.getHolder());                } catch (IOException e) {                    e.printStackTrace();                }            }            @Override            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            }            @Override            public void surfaceDestroyed(SurfaceHolder holder) {                camera.stopPreview();                camera.release();            }        });    }    public void takePhoto(View view){        camera.takePicture(null, null, new Camera.PictureCallback() {            //byte[] data拍照的画面            @Override            public void onPictureTaken(byte[] data, Camera camera) {                Bitmap bitmap=BitmapFactory.decodeByteArray(data,0,data.length);                Calendar calendar=Calendar.getInstance();                //时间戳:年月日,时分秒                int year=calendar.get(Calendar.YEAR);                int month=calendar.get(Calendar.MONTH);                int day=calendar.get(Calendar.DAY_OF_MONTH);                try {                    FileOutputStream fos=new FileOutputStream("/mnt/sdcard/dcim/camera/YD_"+(year+month+1)+day+"_"+System.currentTimeMillis()+".jpg");                    //图片压缩                    bitmap.compress(Bitmap.CompressFormat.JPEG,85,fos);                    //拍完之后可以接着拍                    camera.stopPreview();                    camera.startPreview();                } catch (FileNotFoundException e) {                    e.printStackTrace();                }            }        });    }}

3.权限

    <!-- 读取手机内存的权限 -->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>    <!--获取手机摄像机的权限-->    <uses-permission android:name="android.permission.CAMERA"/>    <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>