2013-12-16 3 views
9

Я беру фотосъемку с использованием передней камеры, используя собственное приложение для камеры, не использующее приложение для системной камеры. Но захваченное фото очень темное, поэтому можно правильно видеть фотографию.Передняя камера берет очень темный захват в андроиде

мой код

mCamera = Camera.open(1); 
Camera.Parameters params =mCamera.getParameters(); 
params.setSceneMode(Camera.Parameters.SCENE_MODE_NIGHT); 
mCamera.setParameters(params); 

И сфотографировать

if (mCamera != null) { 
try { 
mCamera.setPreviewDisplay(mSurfaceHolder); 
mCamera.startPreview(); 
mCamera.takePicture(null, mPictureCallback, 
mPictureCallback); 
} catch (IOException e) { 
e.printStackTrace(); 
    } 
} 

Спасибо заранее. Пожалуйста, дайте мне советы. любая помощь будет оценена.

+1

Не связано ли это с использованием 'SCENE_MODE_NIGHT'? Будучи фотографом, я ожидаю, что ночной режим будет затемнять фотографии, в основном, говорит, что экспозиция экспозиции камеры может быть намного более темной, чем обычная фотография. Что произойдет, если вы попробуете 'SCENE_MODE_AUTO' вместо этого? –

+0

SCENE_MODE_AUTO сделать темное фото. –

+1

Там, где вы находитесь? Серьезно, однако, не уверен, что происходит. Там есть [предыдущий вопрос] (http://stackoverflow.com/questions/19571378/android-image-taken-by-custom-camera-is-too-dark), спрашивающий об этом. Удивительно сложно, учитывая аппаратные варианты Android, чтобы дать твердый ответ на этот вопрос. –

ответ

5

Я нашел следующее решение для этого, и это работало для меня

выждать некоторое время, т.е. 500 мс до захвата изображения с помощью

mCamera.takePicture(null, mPictureCallback,mPictureCallback); 
+0

Не работал для меня. Изображение все еще было темным. – Sam

+0

Я думаю, что баланс белого - это цвет белого, а не экспозиции. – Sam

+0

Я отредактировал ответ, теперь его работа. –

14

Чтобы решить эту проблему, вы можете сделать снимок после того, как некоторые время. Попробуйте следующее:

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     camera.takePicture(null, null, cameraCallback); 
    } 
}, 1000); 
+1

Это сделало трюк для меня. Спасибо :) – user3132352

+0

Это сработало и для меня. Даже когда я использую приложение для фотоаппарата, он занимает немного времени, прежде чем он получит право на изображение. – Sam

+0

Спасибо большое, наконец, это сработало для меня и после траты 3 часа – priyanka

0

Все ответы в этой теме упоминают произвольную задержку, когда основная причина этой проблемы не рассматривается.

Камера в телефоне android выполняет операцию автофокуса после начала предварительного просмотра и перед захватом изображения. В фрагменте кода в вопросе упоминается звонок mCamera.takePicture(null, mPictureCallback,mPictureCallback); сразу после mCamera.startPreview();.

Выполнение снимка во время процесса автофокуса приводит к возникновению проблем с экспозицией в изображении, полученном в результате темных фотографий. Задержки, упомянутые в ответах, дают андроиду время для завершения автофокуса, и захваченное изображение идеально. Это может не случиться с каждым устройством, и произвольное число может привести к сбою на некоторых устройствах.

Моя рекомендация будет следующий фрагмент кода -

Camera.AutoFocusCallback autoFocusCallBack = new Camera.AutoFocusCallback(); 
static autoFocusCallBack(){ 
    mCamera.takePicture(null, mPictureCallback, 
    mPictureCallback); 
} 
if (mCamera != null) { 
    try { 
    mCamera.setPreviewDisplay(mSurfaceHolder); 
    mCamera.startPreview(); 
    mCamera.autoFocus(autoFocusCallBack); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Этот поток гарантирует, что takePicture() вызывается в автофокусировкой обратного вызова предполагающей автофокусировку была успешной. Это даст правильное изображение с соответствующей экспозицией и яркостью.

Это также устранит произвольную задержку.

Прочитано this ссылка для Camera.AutoFocus().

Прочитано this Ссылка для Camera.takePicture().

Прочитано this ссылка для Camera.startPreview().

+0

Я пробовал этот метод, и он не работал для меня. Я создал AutoFocusCallback и переместил код для takePicture() в него, подтвердил, что все было вызвано должным образом. Фотографии были темными и размытыми, тогда как использование метода, представленного Алессандро Роаро, действительно работало (используя обработчик для задержки вызова takePicture()). Я действительно хотел, чтобы это работало, чтобы избежать использования жесткой задержки :-( –

+0

Можете ли вы опубликовать фрагмент кода? Это работает без проблем для меня. –

Смежные вопросы