android 调起摄像头预览

49 篇文章 0 订阅

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();
}

}




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值