2014-11-17 5 views
9

맞춤 카메라 앱을 만들려고합니다. 나는 여기에서 약간의 비틀기와 함께 안드로이드 개발자 예제를 따라 갔다. 그러나 내 카메라 미리보기는 다소 어둡습니다. 반면에 스톡 카메라는 훨씬 더 밝은 미리보기를 제공합니다.Android 카메라 미리보기가 어두움

내가 더 잘 작동하도록 여러 설정을 시도했지만 그 중 아무 것도 영향을 미치지 않는 것으로 보입니다. 관련 코드가 여기에 게시됩니다.

CameraActivity (주)

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_camera); 
    if(CameraHelper.checkCameraHardware(this)) { 
     mHelper = new CameraHelper(this, getWindowManager().getDefaultDisplay()); 
    } 

    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
    mPreview = new CameraPreview(this, CameraHelper.camera); 
    mPreview.setLayoutParams(new LayoutParams(CameraHelper.mSize.width, CameraHelper.mSize.height, Gravity.CENTER)); 

    preview.addView(mPreview); 

} 

CameraHelper 클래스 (카메라를 초기화하고 기본 매개 변수를 설정는)

public CameraHelper(CameraListener listener, Display display){ 
     mListener = listener; 
     camera = getCameraInstance(); 

     mParameters = camera.getParameters(); 
     initCameraParameters(); 

     mSize = getPreviewSize(display); 
     mParameters.setFocusMode(Parameters.FOCUS_MODE_AUTO); 
     mParameters.setPictureSize(2560, 1920); 

     mParameters.setAutoExposureLock(false); 
     mParameters.setAutoWhiteBalanceLock(false); 
     mParameters.set("iso", "ISO800"); //Tried with 400, 800, 600 (values obtained from flatten()) 
     mParameters.setColorEffect("none"); 
     mParameters.setPictureSize(2560, 1920); 
     mParameters.setPreviewFrameRate(20); 
     mParameters.set("scene-mode", "auto"); 
     mParameters.setFocusMode("auto"); 
     mParameters.setExposureCompensation(4);  
     camera.setParameters(mParameters); 
    } 

카메라는 예로부터 SurfaceHolder.Surface로 프레임을 전송 위의 개발자 페이지에서 링크되었습니다. 주식 카메라 Stock Camera Preview 내 카메라 여기에 게시 된 카메라에서 Upack도 매개 변수에 따라 등등 ISO를 설정 시도 My Camera app

:

여기의 차이를 참조하십시오. 여전히 효과가 없었습니다.

매개 변수 (16369) : 효과-값 = 없음, 모노, 부정적, 세피아, 아쿠아, 선명하지, 보라색, 녹색 색조, 푸른 색조, 핑크, 노랑, 빨강 색조, 모노, 골동품, 초점 거리 = 3.43, 초점 영역 = (0,0,0,0,0), 초점 거리 = 0.10,1.20, 무한대, 초점 모드 값 = 자동, 매크로, gps-altitude = 0; gps-latitude = 0; gps-longitude = 0; gps-processing-method = GPS; gps-timestamp = 0; 가로보기 각도 = 51.2; iso = 자동; ISO, ISO200, ISO400, ISO800, ISO1600, jpeg-thumbnail-height = 480, jpeg-thumbnail-size-values ​​= 640x480,0x0, jpeg-thumbnail-width = 640, max- 최대 노출 영역 = 1, 최대 줌 = 12, 최소 노출 보정 = -4, 화상 포맷 = jpeg, 화상 포맷 값 = jpeg, 화상 사이즈 값 = 2560x1920,2560x1536,2048x1536,2048x1232,1600x1200,1600x960,800x 미리보기 형식 = yuv420sp, 미리보기 형식 값 = yuv420sp, 미리보기 fps 범위 = 15000,30000, 미리보기 fps 범위 값 = (15000,30000) 미리보기 프레임 속도 = 30 미리보기 -frame-rate-values ​​= 30, 미리보기 크기 = 640x480, 미리보기 크기 값 = 1280x720,800x480,720x480,640x480,352x288, 회전 = 0, 장면 모드 = 자동, 장면 모드 값 = 자동, 세로 , 풍경, 야경, 해변, 설원, 일몰, 불꽃 놀이, 스포츠, 파티, 촛불, asd, 백라이트, 황혼 새벽, 텍스트, 가을 - 색상, vertical-view-angle = 39.4, video-frame-format = yuv422i-yuyv 화이트 밸런스 값 = 자동, 백열등, 형광등, 일광, 흐린 날, 줌 = 0, 줌 비율 = 100125150175200225250275300325350375400, 줌 지원 = true, 포커스 모드 = 자동, 사진 크기 = 2560x1920, 노출 보정 = 4 ;

편집 : 아래의 설명에 따라 추가 테스트를 수행하면 미리보기가 어둡게 나옵니다. 실제 캡처 된 이미지는 잘 켜져 있고 노출 보정은 정상적으로 작동하는 것 같습니다. 나에게 두통을주고있는 바로 그 시사. i9003에서 실행중인 CM11 및 Nexus 10 실행 재고 Android에서 테스트되었습니다.

+0

설정에서 노출 보정을 높이거나 "재생"하려고 할 수 있습니다. 그것은 무엇이든 바뀌 었습니까? –

+0

최대 지원 노출 보정 (예 : 4) (mParameters.setExposureCompensation (4))으로 사용하고 있습니다. 이 사진은 최대 노출 보정으로 촬영됩니다. – Puneet

+0

"params.getMinExposureCompensation()"및 "params.getMaxExposureCompensation()"에서 엑스포 보상의 최대/최소값을 얻었습니까? –

답변

1

내 실험에서 scene-mode 설정은 미리보기를 변경할 수 있습니다 (ISO 또는 노출 보정과 달리 캡처 된 사진에서 작동 함). auto을 사용하지 마십시오. scene-mode-values=night 또는 scene-mode=dusk-dawn을 사용해보십시오.

장면의 문제점은 지원되는 값이 여러 장치에서 표준화되지 않는다는 것입니다. 그러나 어떤 종류의 night이 보통 존재합니다.

+0

테스트를 마쳤습니다. 이 넥서스 7 (안드로이드 L)과 앞 카메라가 잘 작동하지만 어두운 미리보기를 보여주는 백 카메라. 나는 야간 모드를 설정했지만 사용하지 않았다. 다른 인기있는 카메라 앱을 시도해 보았는데 실패 했음에도 불구하고 제대로 작동했다. Google 카메라입니다. 색상 효과와 관련이 있습니까? – Praveen

+0

@Praveen : [GoogleCamera] (https://play.google.com/store/apps/details?id=com.google)에서 리버스 엔지니어링을 수행하지 않았습니다. .기계적 인조 인간.Google 카메라), Nexus 기기에 대한 요구 사항 (4.4 이상)과 추가 사항을 고려할 때 Nexus 7의 덜 멋진 백 카메라로 조정했다고 가정합니다. –

+0

밤이나 파티와 같은 장면 모드는 카메라 - 적어도 Nexus 5의 경우입니다. 내가 한 일은 빛을 측정 한 다음 그것을 바탕으로 점차적으로 노출 값을 변경하는 것이 었습니다. 결과가 좋았습니다. – slott

9

지원되는 미리보기 FPS 범위를 잘못보고 한 카메라의 버그가있는 것 같습니다. 내 경우에는

getPreviewFpsRange (int[] range)

를 호출 할 때 당신은 최소 및 최대에 대해 동일한 값을 반환 그들에 의해 잘못된 장치를 식별 할 수 나는 장치를 어디에 값 (15000, 15000)(30000, 30000),하지만보고 장치와이 문제를 보았다 (7000, 30000)과 같이 다릅니다. 보고 범위 만에 1 개 항목을 갖고있는 것 같다 있기 때문에이 작동

Camera.Parameters params = camera.getParameters(); 
final int[] previewFpsRange = new int[2]; 
params.getPreviewFpsRange(previewFpsRange); 
if (previewFpsRange[0] == previewFpsRange[1]) { 
    final List<int[]> supportedFpsRanges = params.getSupportedPreviewFpsRange(); 
    for (int[] range : supportedFpsRanges) { 
     if (range[0] != range[1]) { 
      params.setPreviewFpsRange(range[0], range[1]); 
      break; 
     } 
    } 
} 
camera.setParameters(params); 

: 내가 찾을 수

가장 좋은 방법은 최소 및 최대 다른 값을 가지고 지원 FPS 범위를 식별하고 그 설정했다 실제 범위. 예 :

BLU 생체 XL :

preview-fps-range=30000,30000 
preview-fps-range-values=(15000,15000),(20000,20000),(24000,24000),(5000,30000),(30000,30000) 

픽셀 :

preview-fps-range=7000,30000 
preview-fps-range-values=(15000,15000),(24000,24000),(7000,30000),(30000,30000) 

보다 강력한 접근 방식은 모든 가능한 비교하여 최소 및 최대를 설정하는 것입니다.

+0

이것은 원래의 문제에서 쉽게 문제가 될 수 있습니다. 주석에서 언급했듯이 카메라가 범위 (15-30) fps에 대한 지원을보고하는 동안 FPS = 20으로 설정 한 코드가 주석에 표시했습니다. –

+0

제 넥서스 7에서는 장면 모드를 변경할 수 있지만 촬영 한 사진에 효과가 있더라도 미리보기에서 색상 효과를 표시 할 수 없습니다. 셔터 버튼을 누른 채로 초의 부분에 색상 효과를 볼 수 있습니다. FPS 범위의 모든 조합을 시도했지만 사용하지 않았습니다. 어떤 생각? – Praveen

+0

FPS 조정 (보정)을 시도하고이 문제에 관해 다시 알려 드리겠습니다. 나는 손가락을 엇갈리게 유지하기 위해 많은 설정을 시도했다. – Puneet

관련 문제