[英]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.