布局文件xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".CameraActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="400px"
android:layout_height="2dp"
android:text=" " />
<SurfaceView
android:id="@+id/camera1"
android:layout_width="500px"
android:layout_height="400px"
android:screenOrientation="landscape" />
</LinearLayout>
java文件:
package com.example.XXXX;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
import com.beiyang.activity.VehiclehlActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
public class CameraActivity extends Activity implements SurfaceHolder.Callback,View.OnClickListener{
SurfaceView cameraSurface;
private Camera mCamera;
private boolean mPreviewRunning = true;
String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
cameraSurface = (SurfaceView) findViewById(R.id.camera1);
cameraSurface.setOnClickListener(this);
cameraSurface.setZOrderOnTop(true);
// mSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
cameraSurface.getHolder().setFormat(PixelFormat.TRANSLUCENT);
// mSurfaceView.setBackgroundResource(selColor);
cameraSurface.setBackgroundDrawable(getResources().getDrawable(
R.drawable.photo2));
SurfaceHolder mSurfaceHolder = cameraSurface.getHolder();// 调用摄像头
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.camera, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.camera1:
if (mCamera == null) {// 摄像头为null,返回
return;
}
mCamera.takePicture(shutter2, raw, jpegCallback);
break;
default:
break;
}
}
Camera.PictureCallback raw = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {
}
};
/**
* 回调
*
* @author
*/
private PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] _data, Camera _camera) {
// TODO Handle JPEG image data
/* onPictureTaken传入的第一个参数即为相片的byte */
savepicture(_data);
}
};
Camera.ShutterCallback shutter2 = new Camera.ShutterCallback() {
public void onShutter() {
}
};
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int arg2, int arg3) {
if (mCamera == null) {
// log.info("摄像头为空,surfaceChanged返回");
return;
}
if (mPreviewRunning) {
mCamera.stopPreview();
// log.info("停止摄像头");
}
Camera.Parameters p = mCamera.getParameters();
p.setPreviewSize(640, 480);
//p.set("rotation", -90);
// p.set("orientation", "landscape");
mCamera.setDisplayOrientation(0);
try {
mCamera.setParameters(p);
} catch (Exception e) {
// TODO: handle exception
Log.v("11", e.toString());
}
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
// log.error("摄像头预览:", e);
}
mCamera.startPreview();
mPreviewRunning = true;
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
try {
mCamera = Camera.open();
} catch (Exception e) {
// TODO: handle exception
return;
}
// log.info("打开摄像头");
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCamera == null) {
return;
}
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
}
/**
* 将byte保存为jpg
*
* @author
*/
public void savepicture(byte[] _data) {
Bitmap bm = BitmapFactory.decodeByteArray(_data, 0, _data.length);
/* 创建新文件 */
path = snappath + "/" + System.currentTimeMillis() + ".jpg";//路径自己写
File myCaptureFile = new File(path);
try {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); /* 采用压缩转档方法 */
bos.flush();
bos.close();
Thread.sleep(100);
mCamera.startPreview();
} catch (Exception e) {
// log.error("保存图片:", e);
}
// log.info("存储抓拍照片成功:" + path);
}
}