自主创建Camera照相机

自主创建Camera照相机

看完这个列子就懂了:
MainActivity.java文件
package com.example.userdefinedcameratest;

import android.app.Activity;
import android.content.Intent;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class MainActivity extends Activity {
    SurfaceView showPicture;
    SurfaceHolder holder;
    Button takepicture;
    Camera camera;
    File picture_file = null;
//    获取回调机制
    private SurfaceHolder.Callback callback = new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            startpreview();
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            stoppreview();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showPicture = (SurfaceView) findViewById(R.id.showPicture);
        holder = showPicture.getHolder();
        holder.addCallback(callback);
        takepicture = (Button) findViewById(R.id.takepicture);
        takepicture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                使用Camera获取图片数据,(相当于按下快门)
                camera.takePicture(null,null,new Camera.PictureCallback() {
                    @Override
                    public void onPictureTaken(byte[] data, Camera camera) {
                        if (savePicture(data)!=null) {
//                        获取路径
                            String picture_path = savePicture(data);
//                        启动显示图片activity
                            Intent intent = new Intent(MainActivity.this, GetPicture.class);
                            intent.putExtra("path", picture_path);
                            startActivity(intent);
                        }
                        else
                            Toast.makeText(MainActivity.this, "保存失败",Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
    }
    private  String savePicture(byte[]data)
    {
//        创建文件夹
        File file = new File(Environment.getExternalStorageDirectory(), "picture");
//        判断该文件夹是否存在
        if (!file.exists())
        {
//            不存在-创建
            file.mkdirs();
        }
//        创建文件
        picture_file = new File(file, System.currentTimeMillis()+".jpg");
//        判断文件是否存在
        if (!picture_file.exists())
        {
//            不存在-创建
            try {
                picture_file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
//        创建输出流
        try {
            FileOutputStream output = new FileOutputStream(picture_file);
//            写入数据
            output.write(data);
            output.flush();
            output.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
//        返回文件的绝对路径
        return picture_file.getAbsolutePath();
    }


    private void startpreview()
    {
        camera = Camera.open();
        try {
//            将画面投影到surfaceView
            camera.setPreviewDisplay(holder);
//            旋转90度
            camera.setDisplayOrientation(90);
            camera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void stoppreview()
    {
//        暂停投影
        camera.stopPreview();
//        释放
        camera.release();
    }
}
GetPicture.java文件:
package com.example.userdefinedcameratest;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

/**
 * Created by 辉 on 2016/7/24.
 */
public class GetPicture extends Activity {
    ImageView get_picture;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.get_picture);
        get_picture = (ImageView) findViewById(R.id.get_picture);
        Intent intent =getIntent();
//        获取传来的路径
        String path = intent.getStringExtra("path");
//        方法:3
        Bitmap bitmap = BitmapFactory.decodeFile(path);
        get_picture.setImageBitmap(bitmap);
//        方法:2
//        get_picture.setImageURI(Uri.fromFile(new File(path)));
//        方法:1
//        创建输入流获取图片
//        try {
//            FileInputStream fileInputStream = new FileInputStream(path);
////            通过路径获取bitMap图片
//            Bitmap picture = BitmapFactory.decodeStream(fileInputStream);
//
//            get_picture.setImageBitmap(picture);
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值