在Android上通过相机确定暗/亮

时间:2014-11-22 17:21:43

标签: java android camera

有人可以提供一些简单的代码来确定使用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)会更好,那么很容易读取每个字节的值。

非常感谢帮助。

1 个答案:

答案 0 :(得分: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);