相机开发中,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
7589浏览 • 3回复 待解决
相机类开发只支持 Java 吗?
2674浏览 • 1回复 待解决
求助:链接远程MySQL数据库时报java.lang.ExceptionInInitializerError 错误
6677浏览 • 1回复 已解决
HarmonyOS 相机开发中ImageReceiver所遇到的问题
145浏览 • 1回复 待解决
HarmonyOS 应用相机开发疑问
86浏览 • 1回复 待解决
在Java UI中,如何在一个组件中放置相机的预览界面
6867浏览 • 4回复 待解决
如何设置request.agent.Config中saveas参数
493浏览 • 1回复 待解决
IDE Profiler里的帧率测试中的Frame数据无法导出
615浏览 • 1回复 待解决
相机实现预览和拍照,开发者通过调用HarmonyOS相机服务提供的接口可以开发相机应用
972浏览 • 1回复 待解决
求助鸿蒙开发Java ability跳转?
3839浏览 • 1回复 待解决
使用js语言如何开发相机
2970浏览 • 1回复 待解决
java蓝牙开发怎么取消配对
4947浏览 • 1回复 待解决
如何调用config.json中的数据项
9373浏览 • 2回复 待解决
HarmonyOS renderNode的frame设置问题
458浏览 • 1回复 待解决
HarmonyOS NEXT中ArkTS与Java/Kotlin的混合开发如何最佳实践?
505浏览 • 0回复 待解决
服务卡片只能基于JAVA开发吗?
3307浏览 • 1回复 待解决
HarmonyOS request.agent.Config 中的saveas属性值更改
207浏览 • 1回复 待解决
在Deveco Studio的应用开发中Java和eTS是什么关系?
6915浏览 • 2回复 已解决
OpenHarmony应用开发会支持java吗?
10577浏览 • 2回复 待解决
HarmonyOS JS+Java混合开发如何单独调试Java或者JS模块呢?
6058浏览 • 1回复 待解决
三方相机预览demo开发
814浏览 • 1回复 待解决
关于Java UI拖拽式开发的问题
5939浏览 • 1回复 待解决
如何在config.json的abilities中为PA添加声明
8767浏览 • 2回复 待解决
请问一下哪里有HarmonyOS开发API 6中Java API的详细文档?
577浏览 • 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上横屏切换到竖屏,报错频率比较高,闪退,报上面错误;
但一直是横屏,偶尔报上面错误,并且闪退。 比较频繁的。
闪退后,重新进入应用,也能正常拍照。