Android摄像头基础(一)

在App中使用Camera的两种方式

  • 调用系统相机、或者是具有相机功能的应用
  • 自定义相机

调用系统相机

调用系统相机很简单,直接只用Intent就可以了

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);

不过这种调用方式,主导权全在系统相机里,也无法获得相机所拍的照片。所以可简单调整下,使用startActivityForResult的方式调用,然后在onActivityResult中接收数据。

public static final int REQ_1 = 1;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQ_1);

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    
  super.onActivityResult(requestCode, resultCode, data);    
    if(resultCode == RESULT_OK){        
      if(requestCode == REQ_1){            
      //为防止数据溢出,该data返回的是缩略图            
      Bundle bundle = data.getExtras();//包含相机返回的照片的二进制流            
      Bitmap bitmap = (Bitmap) bundle.get("data");
      img.setImageBitmap(bitmap);       
     }    
  }
}

因为Bitmap数据过大,所以Android系统为了防止数据溢出,返回的data是个缩略图。如果想获得原图,可修改照片存放到指定路径,然后直接获取SD下的图片。

public static final int REQ_2 = 2;
private String filePath;  

filePath = Environment.getExternalStorageDirectory().getPath();
filePath = filePath + "/" + "temp.png";

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri photoUri = Uri.fromFile(new File(filePath));
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);//将系统拍的照片,存放到自定路径
startActivityForResult(intent, REQ_2);

//在onActivityResult中处理
FileInputStream fis = null;
try {    
  fis = new FileInputStream(filePath);    
  Bitmap bitmap = BitmapFactory.decodeStream(fis);
  img.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {    
    e.printStackTrace();
}finally {    
    try {        
      fis.close();    
    } catch (IOException e) {        
      e.printStackTrace();    
    }
}

使用这种方式获取SD图片时,有可能因为Bitmap过大而出现异常,可以根据需要将Bitmap压缩下。

FileInputStream is = null;Bitmap bitmap = null;
BufferedInputStream bis = null;
try {    
  is = new FileInputStream(filePath);    
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inSampleSize = 2;//长宽都调为原来的1/2    
  bis = new   BufferedInputStream(is);    
  bitmap = BitmapFactory.decodeStream(bis, null, options);
  img.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {    
  e.printStackTrace();
}finally {    
  try {       
     is.close();        
    bis.close();    
} catch (IOException e) {        
  e.printStackTrace();   
 }
}

你可能感兴趣的:(Android摄像头基础(一))