繁体   English   中英

在Android上通过摄像头确定暗/亮

[英]Determine dark/light by camera on Android

有人可以提供一些简单的代码来使用Android使用摄像头确定暗还是暗。 它不一定是准确的。 只有黑暗或明亮。

在另一篇文章中,建议使用有时会出现在Android设备中的光传感器,这是理想的选择,但我测试过的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)会更好,然后可以很容易地读取每个字节的值。

非常感谢您的帮助。

我自己想通了:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM