Android Camera照相机

java代码:
package com.Aina.Android;

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

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * com.Aina.Android Pro_Camera
 * 
 * @author Aina.huang E-mail: 674023920@qq.com
 * @version 创建时间:2010 Jul 7, 2010 2:50:15 PM 类说明
 */
public class PreView extends SurfaceView implements SurfaceHolder.Callback {

	private SurfaceHolder holder = null;
	private Camera mCamera = null;
	private Bitmap mBitmap = null;

	public PreView(Context context) {
		super(context);
		Log.i("TAG", "PreView()");
		// TODO Auto-generated constructor stub
		holder = this.getHolder();
		holder.addCallback(this);
		holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
	}

	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		Log.i("TAG", "surfaceChanged");
		// TODO Auto-generated method stub
		Camera.Parameters parameters = mCamera.getParameters();
		parameters.setPictureFormat(PixelFormat.JPEG);//设置图片格式
		parameters.setPreviewSize(320, 480);//设置尺寸
//		parameters.setPictureSize(320, 480);//设置分辨率
		mCamera.setParameters(parameters);
		mCamera.startPreview();//开始预览
	}

	public void surfaceCreated(SurfaceHolder holder) {
		Log.i("TAG", "surfaceCreated");
		// TODO Auto-generated method stub
		mCamera = Camera.open();//启动服务
		try {
			mCamera.setPreviewDisplay(holder);//设置预览
		} catch (IOException e) {
			mCamera.release();//释放
			mCamera = null;
		}
	}

	public void surfaceDestroyed(SurfaceHolder holder) {
		Log.i("TAG", "surfaceDestroyed");
		// TODO Auto-generated method stub
		mCamera.stopPreview();//停止预览
		mCamera = null;
	}

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){
			if(mCamera !=null){
				mCamera.takePicture(null, null,pic);
			}
		}
		return super.onKeyDown(keyCode, event);
	}
	//拍照后输出图片
	public Camera.PictureCallback pic = new Camera.PictureCallback(){

		public void onPictureTaken(byte[] data, Camera camera) {
			// TODO Auto-generated method stub
			mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
			File f = new File(android.os.Environment.getExternalStorageDirectory()+"/camera1.jpg");
			try {
				BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f));
				mBitmap.compress(Bitmap.CompressFormat.JPEG, 80, os);
				os.flush();
				os.close();
				Canvas canvas = holder.lockCanvas();
				canvas.drawBitmap(mBitmap, 0, 0, null);
				holder.unlockCanvasAndPost(canvas);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	};
}


package com.Aina.Android;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;

public class Test extends Activity {
    /** Called when the activity is first created. */
	private PreView pv = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        pv = new PreView(this);
        setContentView(pv);
    }

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		return pv.onKeyDown(keyCode, event);
	}
    
}


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.Aina.Android"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Test"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
 <uses-permission android:name="android.permission.CAMERA" /> 
 <uses-feature android:name="android.hardware.camera" /> 
 <uses-feature android:name="android.hardware.camera.autofocus" />

</manifest> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值