欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android开启摄像头拍照,android开启摄像头,import java.

来源: javaer 分享于  点击 4841 次 点评:87

Android开启摄像头拍照,android开启摄像头,import java.


import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.Calendar;import java.util.Locale;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.PixelFormat;import android.hardware.Camera;import android.os.Bundle;import android.text.format.DateFormat;import android.util.Log;import android.view.KeyEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.Window;import android.view.WindowManager;import android.widget.FrameLayout;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {    private CameraView cv;    // 准备一个相机对象    private Camera mCamera = null;    // 准备一个Bitmap对象    private Bitmap mBitmap = null;    // 准备一个保存图片的PictureCallback对象    public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {        public void onPictureTaken(byte[] data, Camera camera) {            Log.i("yao", "onPictureTaken");            Toast.makeText(getApplicationContext(), "正在保存……", Toast.LENGTH_LONG)                    .show();            // 用BitmapFactory.decodeByteArray()方法可以把相机传回的裸数据转换成Bitmap对象            mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);            // 接下来的工作就是把Bitmap保存成一个存储卡中的文件            File file = new File("/sdcard/YY"                    + new DateFormat().format("yyyyMMdd_hhmmss",                            Calendar.getInstance(Locale.CHINA)) + ".jpg");            try {                file.createNewFile();                BufferedOutputStream os = new BufferedOutputStream(                        new FileOutputStream(file));                mBitmap.compress(Bitmap.CompressFormat.PNG, 100, os);                os.flush();                os.close();                Toast.makeText(getApplicationContext(), "图片保存完毕,在存储卡的根目录",                        Toast.LENGTH_LONG).show();            } catch (IOException e) {                e.printStackTrace();            }        }    };    // Activity的创建方法    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 窗口去掉标题        requestWindowFeature(Window.FEATURE_NO_TITLE);        // 窗口设置为全屏        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                WindowManager.LayoutParams.FLAG_FULLSCREEN);        // 设置窗口为半透明        getWindow().setFormat(PixelFormat.TRANSLUCENT);        // 提供一个帧布局        FrameLayout fl = new FrameLayout(this);        // 创建一个照相预览用的SurfaceView子类,并放在帧布局的底层        cv = new CameraView(this);        fl.addView(cv);        // 创建一个文本框添加在帧布局中,我们可以看到,文字自动出现在了SurfaceView的前面,由此你可以在预览窗口做出各种特殊效果        TextView tv = new TextView(this);        tv.setText("请按\"相机\"按钮拍摄");        fl.addView(tv);        // 设置Activity的根内容视图        setContentView(fl);    }    // 相机按键按下的事件处理方法    public boolean onKeyDown(int keyCode, KeyEvent event) {        Log.i("yao", "MainActivity.onKeyDown");        if (keyCode == KeyEvent.KEYCODE_CAMERA) {            if (mCamera != null) {                Log.i("yao", "mCamera.takePicture");                // 当按下相机按钮时,执行相机对象的takePicture()方法,该方法有三个回调对象做入参,不需要的时候可以设null                mCamera.takePicture(null, null, pictureCallback);            }        }        return cv.onKeyDown(keyCode, event);    }    // 照相视图    class CameraView extends SurfaceView {        private SurfaceHolder holder = null;        // 构造函数        public CameraView(Context context) {            super(context);            Log.i("yao", "CameraView");            // 操作surface的holder            holder = this.getHolder();            // 创建SurfaceHolder.Callback对象            holder.addCallback(new SurfaceHolder.Callback() {                @Override                public void surfaceDestroyed(SurfaceHolder holder) {                    // 停止预览                    mCamera.stopPreview();                    // 释放相机资源并置空                    mCamera.release();                    mCamera = null;                }                @Override                public void surfaceCreated(SurfaceHolder holder) {                    // 当预览视图创建的时候开启相机                    mCamera = Camera.open();                    try {                        // 设置预览                        mCamera.setPreviewDisplay(holder);                    } catch (IOException e) {                        // 释放相机资源并置空                        mCamera.release();                        mCamera = null;                    }                }                // 当surface视图数据发生变化时,处理预览信息                @Override                public void surfaceChanged(SurfaceHolder holder, int format,                        int width, int height) {                    // 获得相机参数对象                    Camera.Parameters parameters = mCamera.getParameters();                    // 设置格式                    parameters.setPictureFormat(PixelFormat.JPEG);                    // 设置预览大小,这里我的测试机是Milsstone所以设置的是854x480                    parameters.setPreviewSize(854, 480);                    // 设置自动对焦                    parameters.setFocusMode("auto");                    // 设置图片保存时的分辨率大小                    parameters.setPictureSize(2592, 1456);                    // 给相机对象设置刚才设定的参数                    mCamera.setParameters(parameters);                    // 开始预览                    mCamera.startPreview();                }            });            // 设置Push缓冲类型,说明surface数据由其他来源提供,而不是用自己的Canvas来绘图,在这里是由摄像头来提供数据            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        }    }}----------------------------------------------------------------<?xml version="1.0" encoding="utf-8"?><manifest package="basic.android.lesson36" xmlns:android="http://schemas.android.com/apk/res/android" android:versioncode="1" android:versionname="1.0">        <application android:label="@string/app_name" android:icon="@drawable/icon">                <activity android:label="@string/app_name" android:name=".MainActivity" android:screenorientation="landscape" android:configchanges="orientation|keyboardHidden|keyboard">                        <intent -filter="">                                <action android:name="android.intent.action.MAIN">                                <category android:name="android.intent.category.LAUNCHER">                        </category></action></intent>                </activity>        </application>        <uses -sdk="" android:minsdkversion="8">        <uses -permission="" android:name="android.permission.CAMERA"></uses>        <uses -permission="" android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses>        <uses -feature="" android:name="android.hardware.camera">        <uses -feature="" android:name="android.hardware.camera.autofocus"></uses></uses></uses></manifest>  
相关栏目:

用户点评