java - Android 10 Camera2 API:CONTROL_EFFECT_MODE 不起作用
问题描述
我在我的应用程序中实现了以下代码。
previewRequestBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE,CameraMetadata.CONTROL_EFFECT_MODE_NEGATIVE);
它已在 Mi9t、OnePlus 7 Pro、带有 Android 10 的华为 P20 上进行了测试,但无法正常工作。在搭载 Android 9(Redmi 5 和 OnePlus 5T)的设备上。它没有向我显示对预览的负面影响。我错过了什么吗?
编辑:当单击菜单项时,两个捕获请求都会更新。它可以在装有 Android 9 的设备上完美运行。
public class MainActivity extends AppCompatActivity{
private static final CaptureRequest.Key<Integer> EFFECT = CaptureRequest.CONTROL_EFFECT_MODE;
....
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.negative:
setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_NEGATIVE);
return true;
case R.id.aqua:
setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_AQUA);
return true;
case R.id.solarize:
setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_SOLARIZE);
return true;
case R.id.blackboard:
setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_BLACKBOARD);
return true;
case R.id.sepia:
setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_SEPIA);
return true;
case R.id.posterize:
setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_POSTERIZE);
return true;
case R.id.whiteboard:
setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_WHITEBOARD);
return true;
case R.id.effectOff:
setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_OFF);
}
return false;
}
private void setCameraPreference(CaptureRequest.Key<Integer> key,int value){
previewRequestBuilder.set(key,value);
pictureRequestBuilder.set(key,value);
updatePreview();
}
protected void updatePreview() {
if (null == cameraDevice) {
}
try {
captureSession.setRepeatingRequest(previewRequestBuilder.build(), null, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
以下方法仅在按下按钮时和捕获请求更新后调用。
protected void takePicture() {
if (null == cameraDevice) {
return;
}
int rotation = getWindowManager().getDefaultDisplay().getRotation();
manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
characteristics = manager.getCameraCharacteristics(cameraDevice.getId());
pictureRequestBuilder.addTarget(imageReader.getSurface());
pictureRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, CameraTools.getJpegOrientation(characteristics, rotation));
file = CameraTools.createFilePhoto(folder);
imageReader.setOnImageAvailableListener(imageListener, null);
captureSession.capture(pictureRequestBuilder.build(), captureCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
EDIT2:我检查了我的设备槽的可用效果:
int effects[] = characteristics.get(CameraCharacteristics.CONTROL_AVAILABLE_EFFECTS);
for (int effect : effects){
Log.d("camera2d", "Effects available: "+effect);
结果:
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 0
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 1
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 2
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 3
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 4
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 5
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 8
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 7
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 6
解决方案
推荐阅读
- python - Django:对两种不同模型的不同字段的操作
- r - 从 R 中的 AWS S3 读取 gzip 文件的内容
- javascript - Vue 不加载动态 src 并且 require 不起作用
- bitbucket - 使用 bitbucket api 从工作区中删除成员
- c++ - 如何更改键盘行为?
- bash - makefile 在每个目标调用上增加参数值
- java - 如何创建Java HttpsServer 多线程?
- image - 如何将动态高度设置为 PageView 以在颤动中显示图像?
- c++ - 如何打印向量的向量?错误显示此“没有匹配函数调用 'begin(std::vector
**&)" - kotlin - 在 Kotlin 的“何时”块中访问同一案例两次?