有人可以提供一些简单的代码来确定使用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 :(得分: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);