相机开发中,cameraDevice.getFrameConfigBuilder(FRAME_CONFIG_PICTURE) java.lang.NullPointerException
Attempt to invoke interface method 'android.hardware.camera2.impl.CameraMetadataNative android.hardware.camera2.ICameraDeviceUser.createDefaultRequest(int)' on a null object reference
java.lang.NullPointerException: Attempt to invoke interface method 'android.hardware.camera2.impl.CameraMetadataNative android.hardware.camera2.ICameraDeviceUser.createDefaultRequest(int)' on a null object reference
相机
空指针
赞
收藏 0
回答 6
待解决
相关问题
想开发NFC碰一碰功能,报错:java.lang.NullPointerException: Attempt to invoke virtual method 'void oh
4772浏览 • 3回复 待解决
在Java UI中,如何在一个组件中放置相机的预览界面
4007浏览 • 4回复 待解决
求助:链接远程MySQL数据库时报java.lang.ExceptionInInitializerError 错误
4440浏览 • 1回复 已解决
使用js语言如何开发相机
492浏览 • 1回复 待解决
如何调用config.json中的数据项
5703浏览 • 2回复 待解决
鸿蒙相机开发可以预览,但是拍照显示空指针异常?
3933浏览 • 1回复 待解决
如何在config.json的abilities中为PA添加声明
5665浏览 • 2回复 待解决
在Deveco Studio的应用开发中Java和eTS是什么关系?
3508浏览 • 2回复 已解决
Java编译中说不是语句
2976浏览 • 2回复 待解决
求助鸿蒙开发Java ability跳转?
1213浏览 • 1回复 待解决
服务卡片只能基于JAVA开发吗?
906浏览 • 1回复 待解决
鸿蒙java开发 如何设置一段文字中的某个字的字体颜色
2866浏览 • 3回复 待解决
java中如何设置CommonDialog的位置?
2735浏览 • 1回复 待解决
应用的配置文件“config.json”中添加注释怎么做呢
7255浏览 • 2回复 待解决
java蓝牙开发怎么取消配对
2380浏览 • 1回复 待解决
API 版本适配config.json
3998浏览 • 1回复 待解决
redis config 持久化怎么设置?
929浏览 • 1回复 待解决
HarmonyOS中如何用Java实现配音功能
1916浏览 • 1回复 待解决
TV 中如何用Java播放本地视频
6355浏览 • 2回复 待解决
OpenHarmony应用开发会支持java吗?
6281浏览 • 2回复 待解决
有没有相机免费推流sdk?
2674浏览 • 1回复 待解决
如何从app跳转到系统相机
2397浏览 • 1回复 已解决
使用pip config (pip3 config)配置pip相关的参数失败,怎么解决?
6080浏览 • 1回复 待解决
鸿蒙图片资源在Java代码中如何使用
5457浏览 • 1回复 待解决
你的cameraDevice.build 没有声明吧 代码有点少 能贴出来多一点的代码不
private Camera cameraDevice;
/**
* 拍照
*/
private void takePicture(Component component) {
HiLog.info(LABEL_LOG, "takePicture");
if (cameraDevice == null || imageReceiver == null) {
return;
}
// 获取拍照配置模板
FrameConfig.Builder framePictureConfigBuilder = cameraDevice.getFrameConfigBuilder(Camera.FrameConfigType.FRAME_CONFIG_PICTURE);
// 配置拍照Surface
framePictureConfigBuilder.addSurface(imageReceiver.getRecevingSurface());
FrameConfig pictureFrameConfig = framePictureConfigBuilder.build();
//启动单帧捕获(拍照)
cameraDevice.triggerSingleCapture(pictureFrameConfig);
}
代码偶尔会报上面的错误,一般能正常拍照。不知道为什么?
private void openCamera() {
// 图像帧数据接收处理对象
imageReceiver = ImageReceiver.create(SCREEN_WIDTH, SCREEN_HEIGHT, ImageFormat.JPEG, IMAGE_RCV_CAPACITY);
imageReceiver.setImageArrivalListener(this::saveImage);
// 获取CameraKit对象
CameraKit cameraKit = CameraKit.getInstance(getApplicationContext());
String[] cameraList = cameraKit.getCameraIds();
String cameraId = cameraList.length > 1 && isCameraRear ? cameraList[1] : cameraList[0];
CameraStateCallbackImpl cameraStateCallback = new CameraStateCallbackImpl();
//创建相机对象。
cameraKit.createCamera(cameraId, cameraStateCallback, creamEventHandler);
}
class CameraStateCallbackImpl extends CameraStateCallback {
CameraStateCallbackImpl() {
}
//相机设备配置
@Override
public void onCreated(Camera camera) {
previewSurface = surfaceProvider.getSurfaceOps().get().getSurface();
if (previewSurface == null) {
HiLog.info(LABEL_LOG, "create camera filed, preview surface is null");
return;
}
try {
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException exception) {
HiLog.info(LABEL_LOG, "Waiting to be interrupted");
}
//当一个新的相机设备成功创建后,首先需要对相机进行配置,调用configure(CameraConfig)方法实现配置
CameraConfig.Builder cameraConfigBuilder = camera.getCameraConfigBuilder();
cameraConfigBuilder.addSurface(previewSurface);// 配置预览的Surface
cameraConfigBuilder.addSurface(imageReceiver.getRecevingSurface()); // 配置拍照的Surface
camera.configure(cameraConfigBuilder.build()); // 相机设备配置
cameraDevice = camera;
//相机操作控制可用
enableImageGroup();
}
//相机配置成功后,在CameraStateCallback中会触发onConfigured(Camera camera)回调,然后才可以执行相机帧捕获相关的操作
@Override
public void onConfigured(Camera camera) {
//通过getFrameConfigBuilder(FRAME_CONFIG_PREVIEW)方法获取预览配置模板
FrameConfig.Builder framePreviewConfigBuilder = camera.getFrameConfigBuilder(FRAME_CONFIG_PREVIEW);
framePreviewConfigBuilder.addSurface(previewSurface); //配置预览surface和帧的绑定。
try {
// 启动循环帧捕获
camera.triggerLoopingCapture(framePreviewConfigBuilder.build()); //启动或者更新相机帧的循环捕获。
} catch (IllegalArgumentException e) {
HiLog.info(LABEL_LOG, "Argument Exception");
} catch (IllegalStateException e) {
HiLog.info(LABEL_LOG, "State Exception");
}
}
}
//拍照
if (findComponentById(ResourceTable.Id_tack_picture_btn) instanceof Image) {
takePictureImage = (Image) findComponentById(ResourceTable.Id_tack_picture_btn);
}
takePictureImage.setClickedListener(this::takePicture);
/**
* 拍照
*/
private void takePicture(Component component) {
HiLog.info(LABEL_LOG, "takePicture");
if (!takePictureImage.isEnabled()) {
HiLog.info(LABEL_LOG, "takePicture return");
return;
}
if (cameraDevice == null || imageReceiver == null) {
return;
}
// // 获取拍照配置模板
FrameConfig.Builder framePictureConfigBuilder = cameraDevice.getFrameConfigBuilder(Camera.FrameConfigType.FRAME_CONFIG_PICTURE);
// 配置拍照Surface
framePictureConfigBuilder.addSurface(imageReceiver.getRecevingSurface());
FrameConfig pictureFrameConfig = framePictureConfigBuilder.build();
//启动单帧捕获(拍照)
cameraDevice.triggerSingleCapture(pictureFrameConfig);
}
啥叫有时候会报错 问题不能频繁复现?
拍照这个应用运行在pad 上,在pad上横屏切换到竖屏,报错频率比较高,闪退,报上面错误;
但一直是横屏,偶尔报上面错误,并且闪退。 比较频繁的。
闪退后,重新进入应用,也能正常拍照。