nOpened(@NonNull CameraDevice camera) {

// 相機打開成功后的回調

}

@Override

public void onDisconnected(@NonNull CameraDevice camera) {

// 相機斷開連接后的回調

}

@Override

public void onError(@NonNull CameraDevice camera, int error) {

// 相機打開失敗后的回調

}

}, null);

“`

步驟三:設置相機參數

通過Camera.Parameters類或CameraCharacteristics類設置相機參數。具體代碼如下:

“`java

// 使用Camera.Parameters類

Camera.Parameters parameters = camera.getParameters();

parameters.setPictureSize(width, height);

parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);

camera.setParameters(parameters);

// 使用CameraCharacteristics類

CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);

StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);

Size[] sizes = map.getOutputSizes(SurfaceTexture.class);

int width = sizes[0].getWidth();

int height = sizes[0].getHeight();

“`

步驟四:預覽和拍照/錄像

通過SurfaceView或TextureView來實現相機預覽,并通過Camera類或Camera2類的方法來拍照或錄像。具體代碼如下:

“`java

// 使用SurfaceView預覽和拍照

SurfaceView surfaceView = findViewById(R.id.surfaceView);

SurfaceHolder surfaceHolder = surfaceView.getHolder();

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

surfaceHolder.addCallback(new SurfaceHolder.Callback() {

@Override

public void surfaceCreated(SurfaceHolder holder) {

try {

camera.setPreviewDisplay(holder);

camera.startPreview();

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

// 預覽尺寸發生改變時的回調

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

camera.stopPreview();

camera.release();

}

});

// 使用TextureView預覽和拍照

TextureView textureView = findViewById(R.id.textureView);

textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {

@Override

public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {

try {

Surface s = new Surface(surface);

camera.setPreviewDisplay(s);

camera.startPreview();

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

// 預覽尺寸發生改變時的回調

}

@Override

public boolean onSurfaceTexAPPtureDestroyed(SurfaceTexture surface) {

camera.stopPreview();

camera.release();

return true;

}

@Override

public void onSurfaceTextureUpdated(SurfaceTexture surface) {

// SurfaceTexture更新時的回調

}

});

“`

通過以上步驟,就可以在app中調用相機參數,并實現拍照、錄像等功能。在實際開發中,可以根據需求進一步調整相機參數,并處理相機的各種回調事件。

未經允許不得轉載:智電網絡 NET » app開發中如何調動相機參數?

相關推薦