2014-11-22 139 views
0

有人可以提供一些简单的代码来确定使用Android的摄像头的黑暗或光线。它不一定是准确的。只有黑暗或光明。在Android上通过摄像头确定黑暗/光线

在另一篇文章中,有人提出了Android设备中有时会出现的lightsensor,这将是理想的,但是我测试过的2款Android设备并没有这种传感器。所以我选择了相机解决方案。

我有这样的代码已经:

PictureCallback fCallback = new PictureCallback() { 

public void onPictureTaken(byte[] data, Camera camera) { 


camera.stopPreview(); 
camera.release(); 

}

camera = Camera.open(0); 
Camera.Parameters param=camera.getParameters(); 
param.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
param.setPictureFormat(ImageFormat.NV21); 
camera.setParameters(param);  
camera.startPreview(); 
camera.takePicture(null, null, fCallback); 

我得到使用JPG PARAM imgformat设置有效的数据,但如果回调函数产生原始RGB数据会更好(即3x8bit),然后很容易读取每个字节的值。

帮助非常感谢。

回答

0

我已经想通了自己:

PictureCallback fCallback = new PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 

     Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); 
      if ((bm.getWidth() > 200) && (bm.getHeight() > 200)) 
     { 
      int lum = Color.red(bm.getPixel(50, 50)); 
      lum += Color.red(bm.getPixel(100, 100)); 
      lum += Color.red(bm.getPixel(150, 150)); 
      lum += Color.red(bm.getPixel(200, 200)); 
      lum += Color.green(bm.getPixel(50, 50)); 
      lum += Color.green(bm.getPixel(100, 100)); 
      lum += Color.green(bm.getPixel(150, 150)); 
      lum += Color.green(bm.getPixel(200, 200)); 
      lum += Color.blue(bm.getPixel(50, 50)); 
      lum += Color.blue(bm.getPixel(100, 100)); 
      lum += Color.blue(bm.getPixel(150, 150)); 
      lum += Color.blue(bm.getPixel(200, 200)); 
      lum = lum/12; 

     if (lum<3) 
      tvMain.setText("dark"); 
     else 
      tvMain.setText("light");  

     camready = true; 
     } 

     } 
    }; 



camera = Camera.open(findFrontFacingCamera()); 
Camera.Parameters param=camera.getParameters(); 
param.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
param.set("rawsave-mode", "1"); 
param.setPictureFormat(ImageFormat.RGB_565); 
camera.setParameters(param); 
camera.startPreview(); 
camera.takePicture(null, null, fCallback);