2013-12-16 9 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

私は、このために、次の解決策を発見した、そして、それはあなたには、いくつかの後に写真を撮ることができ、この問題を解決するために

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

私のために働かなかった。画像はまだ暗いままでした。 – Sam

+0

ホワイトバランスは露出よりもむしろ白の色だと思います。 – Sam

+0

私は今、答えを編集しました。 –

14

を使用して、すなわち500ミリ秒のキャプチャ画像の前にいくつかの時間のために私のために

待ちを働きました時間。これを試してみてください:

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

これは私のためのトリックでした。ありがとうございました:) – user3132352

+0

これは私にとってもうまくいきました。ストックカメラアプリを使用している場合でも、露出が正しくなるまでには少し時間がかかります。 – Sam

+0

ありがとう、最後に私は3時間を浪費した後にも私のために働いた – priyanka

0

このスレッドのすべての回答には、この問題の根本原因が解決されていない任意の遅延があります。

アンドロイド携帯電話のカメラは、プレビューの開始後、画像をキャプチャする前に、オートフォーカスアクティビティを実行します。質問のコードスニペットには、mCamera.startPreview();の直後にmCamera.takePicture(null, mPictureCallback,mPictureCallback);があります。

オートフォーカス処理中に写真を撮ると、撮影された画像に露出の問題が発生し、暗い写真になります。答えに記載されている遅れはアンドロイドにそのオートフォーカスを完了させる時間を与え、キャプチャされた画像は完璧です。これはすべてのデバイスでは当てはまらず、一部のデバイスでは任意の数値が失敗する可能性があります。

私の推薦は、コードスニペットを以下のことになる -

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.takePicture()thisリンクを参照してください。

thisCamera.startPreview()のリンクを参照してください。

+0

私はこの方法を試してみました。 AutoFocusCallbackを作成し、takePicture()のコードをその中に移動しました。すべてが正しく呼び出されていることを確認しました。 Alessandro Roaroによって提出されたメソッドを使用すると(takePicture()呼び出しを遅らせるためのハンドラを使用して)、写真は暗くぼやけていました。私は本当にハードディレイを使わないようにこれを働かせたいと思っていました.-( –

+0

あなたはコードスニペットを投稿できますか?これは私のためにシームレスに動作します。 –

関連する問題