Android Camera2特性代码示例

Android Camera2特性代码示例,android,characteristics,Android,Characteristics,谁能给我举个例子,如何在android中使用camera2特性? F.e.如何使用CONTROL\u EFFECT\u MODE\u SEPIAEFFECT? 尝试使用characteristics.get(CameraCharacteristics.CONTROL\u EFFECT\u MODE\u SEPIA),但它给了我一个类型CameraCharacteristics中的方法get(CameraCharacteristics.Key)不适用于参数(int)。 谢谢 第一个和第二个都不适合

谁能给我举个例子,如何在android中使用camera2特性? F.e.如何使用
CONTROL\u EFFECT\u MODE\u SEPIA
EFFECT? 尝试使用
characteristics.get(CameraCharacteristics.CONTROL\u EFFECT\u MODE\u SEPIA)
,但它给了我一个
类型CameraCharacteristics中的方法get(CameraCharacteristics.Key)不适用于参数(int)
。 谢谢 第一个和第二个都不适合我。我确信我做错了什么,所以我想展示我的代码,希望你能帮助我找到解决方案

@Override
public void openCamera() {
        CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);  
        Log.e(TAG, "openCamera E");  

        try {  
            String cameraId = manager.getCameraIdList()[0];  
            characteristics = manager.getCameraCharacteristics(cameraId);
            StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);

            mPreviewSize = map.getOutputSizes(SurfaceTexture.class)[0];

            Log.e(TAG, "Preview size is: " + mPreviewSize.toString());
            manager.openCamera(cameraId, mStateCallback, null);


        } catch (CameraAccessException e) {  
            e.printStackTrace();  
        }  
        Log.e(TAG, "openCamera X");  

    }

    public void updatePreview() {  
        if(null == mCameraDevice) {  
            Log.e(TAG, "updatePreview error, return");  
        }  

        mPreviewBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_OFF);  
        HandlerThread thread = new HandlerThread("CameraPreview");  
        thread.start();  
        backgroundHandler = new Handler(thread.getLooper());  

        try {  
            mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, backgroundHandler);  
        } catch (CameraAccessException e) {  
            e.printStackTrace();  
        }  
    } 

    @Override
    public void startPreview() {

        if(null == mCameraDevice || !myTexture.isAvailable() || null == mPreviewSize) {  
            Log.e(TAG, "startPreview fail, return");  
        }  

        SurfaceTexture texture = myTexture.getSurfaceTexture();  
        if(null == texture) {  
            Log.e(TAG,"texture is null, return");  
            return;  
        }  

        texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
        Surface surface = new Surface(texture);  

        try {  
            mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);  

        } catch (CameraAccessException e) {  
             e.printStackTrace();  
        }  
        mPreviewBuilder.addTarget(surface);  

        try {  
            mCameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {  

                @Override  
                public void onConfigured(CameraCaptureSession session) {  
                    mPreviewSession = session;
                    updatePreview();  
                }  

                @Override  
                public void onConfigureFailed(CameraCaptureSession session) {  
                    Log.e(TAG,"onConfiguration failed.");  
                }  
            }, null);  
        } catch (CameraAccessException e) {  
                e.printStackTrace();  
        }  


    }

    private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {  

        @Override  
        public void onOpened(CameraDevice camera) {  
            Log.e(TAG, "onOpened");  
            mCameraDevice = camera;  
            startPreview();  
        }  

        @Override  
        public void onDisconnected(CameraDevice camera) {  
            Log.e(TAG, "onDisconnected");  
        }  

        @Override  
        public void onError(CameraDevice camera, int error) {  
            Log.e(TAG, "onError");  
        }  

    };  

您需要在CaptureRequest中设置效果模式;摄像机特性将告诉您支持哪些效果模式

大致使用:

int[] supportedEffects = characteristics.get(CameraCharacteristics.CONTROL_AVAILABLE_EFFECTS);
int selectedEffect = supportedEffects[0]; // select effect you want here
requestBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE, selectedEffect);
captureSession.setRepeatingRequest(requestBuilder.build());

例如:

对不起,伙计们,我无法让它工作,我已经编辑了我的帖子,并在那里添加了我的代码。请看一下。感谢上面提到的两种方法,效果很好。在我意识到这是因为这个设备之前,我无法在Nexux5平板电脑上使用它。有没有办法得到它们各自的名字?像SEPIA一样,在Camera1API中是否定的。有没有办法获得效果的字符串名称?
mPreviewBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
mPreviewBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE, CameraMetadata.CONTROL_EFFECT_MODE_NEGATIVE);
mCameraCaptureSession.setRepeatingRequest(mPreviewBuilder.build(), mPreviewSessionCallback, mHandler);