您的位置:首页 > 移动开发 > Android开发

android 调起摄像头预览

2016-12-29 16:38 239 查看
public class MainActivity extends Activity implements Camera.PreviewCallback {

private static final String TAG = “MainActivity”;

private boolean isOpen;

private Camera mCamera;

private static final int width = 400;

private static final int height = 300;

private ByteArrayOutputStream jpegOutputSteam = new ByteArrayOutputStream();

ImageView iv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Log.e(“MainActivity”, “onCreate: hello world”);

iv = new ImageView(this);

getWindow().addContentView(iv, new ViewGroup.LayoutParams(width, height));

}

public void onClickMenu(View view) {
Log.e(TAG,"startCamera");
new Thread() {
@Override
public void run() {
startCamera();
}
}.start();

}

public void startCamera() {
Log.i(TAG, "startCamera: ***************************************************");
if (isOpen) return;
else isOpen = true;
try {

mCamera = Camera.open(0);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(width, height);
//     parameters.setPreviewFrameRate(11);

mCamera.setParameters(parameters);

mCamera.startPreview();
// recorder.start();
mCamera.setPreviewCallback(this);
// mCamera.setPreviewDisplay(holder);
} catch (Exception e) {
Log.w(TAG, "startCamera: ", e);
stopCamera();
}

}
public void stopCamera() {
if (!isOpen) return;
if (null != mCamera) {
try {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
} catch (Exception e) {
Log.e(TAG, "stopCamera: ", e);
}
}
System.gc();
Log.i(TAG, "stopCamera: ***************************************************");
}

public boolean isOpen() {
return isOpen;
}

@Override
public void onPreviewFrame(byte[] bytes, Camera camera) {
try {
byte[] jpeg = getJpeg(bytes);

Log.i(TAG, "onPreviewFrame show jpeg....");
Bitmap bitmap = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length);
iv.setImageBitmap(bitmap);

} catch (Exception e) {
Log.w(TAG, "onPreviewFrame: ", e);
}

}
/**
* 将原始相机预览帧,转换成jpeg图片格式的byte[]
*
* @param bytes 原始相机预览帧
* @return jpeg图片格式的byte[]
* @throws IOException jpegOutputSteam.write();
*/
private byte[] getJpeg(byte[] bytes) throws IOException {
jpegOutputSteam.reset();
YuvImage image = new YuvImage(bytes, ImageFormat.NV21, width, height, null);            //ImageFormat.NV21  640 480
image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 100, jpegOutputSteam); // 将NV21格式图片,以质量70压缩成Jpeg,并得到JPEG数据流
return jpegOutputSteam.toByteArray();
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐