2015-01-21 2 views
0

안드로이드에서 camera2 특성을 사용하는 방법을 보여줄 수있는 사람들은 누구입니까? F.e. CONTROL_EFFECT_MODE_SEPIA 효과를 어떻게 사용합니까? characteristics.get(CameraCharacteristics.CONTROL_EFFECT_MODE_SEPIA)을 사용해 보았지만 The method get(CameraCharacteristics.Key<T>) in the type CameraCharacteristics is not applicable for the arguments (int)을 받았습니다. 감사합니다. . 첫 번째 또는 두 번째 어느 것도 나를 위해 작동하지 않았습니다. 내가 뭔가 잘못하고 있다고 확신하므로 코드를 보여주고 싶습니다. 해결책을 찾도록 도와주세요.Camera2 특성 코드 예

@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"); 
     } 

    }; 

답변

0

CaptureRequest에서 효과 모드를 설정해야합니다. CameraCharacteristics는 지원되는 효과 모드를 알려줍니다.

대략 사용 :

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()); 
+0

미안 얘들 아,하지만 난이 일을하고 내 게시물을 편집하고 거기에 내 코드를 추가 할 수 없었다. 그것 좀 봐주세요. 감사합니다 – user0770

+0

위의 두 가지 방법으로 잘 작동합니다. 장치 때문에 Nexux 5 태블릿에서 작동하지 않게되었습니다. – user0770

+0

각각의 이름을 얻을 수있는 방법이 있습니까? SEPIA와 마찬가지로 NEGATIVE도 Camera1 API에 포함되어있었습니다. –