android相机固定焦距,android - Android相机焦距和焦距不变 - 堆栈内存溢出

我试图检测相机自动对焦时会改变的值,我希望焦距和焦距会改变。 我已经使用FOCUS_MODE_CONTINUOUS_PICTURE运行了我的应用程序。 自动对焦有效,我每秒调用一次getFocalLength()来查看值的变化,无论我移动相机多少,我总是得到4.6。 我也尝试过getFocusDistances(),它一直为所有3个输出返回无穷大。

当焦点改变时,这些函数返回的值应该改变,但是它们没有改变,这是有原因的吗? 当焦点改变时,还有哪些其他参数可以改变? 因为我想检测相机尝试自动对焦时发生的任何变化。

这是我的活动内容:

private Camera mCamera;

private CameraPreview mPreview;

private ArrayList flengths = new ArrayList();

private ArrayList times = new ArrayList();

FileOutputStream outputStream;

Camera.Parameters params;

float[] distances = new float[3];

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

@SuppressLint("NewApi")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if (checkCameraHardware(this)==false)

this.finish();

else if((mCamera=getCameraInstance())==null)

this.finish();

else

{

mPreview = new CameraPreview(this, mCamera);

FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);

preview.addView(mPreview);

params = mCamera.getParameters();

if (params.getMaxNumMeteringAreas() > 0){ // check that metering areas are supported

List meteringAreas = new ArrayList();

Rect areaRect1 = new Rect(-100, -100, 100, 100); // specify an area in center of image

meteringAreas.add(new Camera.Area(areaRect1, 600)); // set weight to 60%

Rect areaRect2 = new Rect(800, -1000, 1000, -800); // specify an area in upper right of image

meteringAreas.add(new Camera.Area(areaRect2, 400)); // set weight to 40%

params.setMeteringAreas(meteringAreas);

}

mCamera.setParameters(params);

new Thread() {

public void run() {

while (true) {

runOnUiThread(new Runnable() {

@Override

public void run() {

mCamera.getParameters().getFocusDistances(distances);

Log.d("focus distance 0", Float.toString(distances[0]));

Log.d("focus distance 1", Float.toString(distances[1]));

Log.d("focus distance 2", Float.toString(distances[2]));

}

});

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}.start();

}

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

/** Check if this device has a camera */

private boolean checkCameraHardware(Context context) {

if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){

// this device has a camera

return true;

} else {

// no camera on this device

return false;

}

}

/** A safe way to get an instance of the Camera object. */

public static Camera getCameraInstance(){

Camera c = null;

try {

c = Camera.open(); // attempt to get a Camera instance

}

catch (Exception e){

// Camera is not available (in use or does not exist)

}

return c; // returns null if camera is unavailable

}

和我相机的内容

private SurfaceHolder mHolder;

private Camera mCamera;

public CameraPreview(Context context, Camera camera) {

super(context);

mCamera = camera;

// Install a SurfaceHolder.Callback so we get notified when the

// underlying surface is created and destroyed.

mHolder = getHolder();

mHolder.addCallback(this);

Log.d(TAG,"in camera preview constructor");

}

public void surfaceCreated(SurfaceHolder holder) {

// The Surface has been created, now tell the camera where to draw the preview.

try {

Log.d(TAG,"in surface created");

mCamera.setPreviewDisplay(holder);

Camera.Parameters params = mCamera.getParameters();

params.setFocusMode("continuous-picture");

mCamera.setParameters(params);

mCamera.startPreview();

} catch (IOException e) {

Log.d(TAG, "Error setting camera preview: " + e.getMessage());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值