android下摄像头的使用,非系统调用

布局文件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);
 }


}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shan1021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值