2017-06-02 60 views
2

Android Camera2を使用して、露出を計算する際に領域を使用して画像の上位25%を無視します。Android Camera2 - SamsungデバイスでCONTROL_AE_REGIONSが動作しない

// Compute the metering rectangle to ignore the top 25% of the picture: 
Rect newRect = new Rect(mActiveArraySize.left, (int) (mActiveArraySize.height() * 0.25), mActiveArraySize.right, mActiveArraySize.bottom); 
MeteringRectangle meteringRectangle = new MeteringRectangle(newRect, 1); 
MeteringRectangle[] meteringRectangleArr = { meteringRectangle }; 

// Set the metering rectangle: 
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_REGIONS, meteringRectangleArr); 

// Set the request: 
try { mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, mBackgroundHandler); } 
catch (CameraAccessException e) { e.printStackTrace(); } 

をし、それは私のネクサス5倍に取り組んでいます:私はこれを使用しています。しかし、Samsung Galaxy Note 5(と私は、すべてのSamsungデバイス上で)、それは動作しません、私の領域は無視されます。

私はこの質問を見ました:Android Camera2 API - Set AE-regions not working、彼はそれが三星SDKを使用して動作させることができたと言ってopと。私は本当にそれを避けることを好むだろう。

誰かがAE地域をSamsungデバイスで使用できるように管理していますか?

+0

私は同じ問題があります。 LG Nexus 5を含む3台の電話機で試してみました。( ところで、CONTROL_AE_PRECAPTURE_TRIGGER、CONTROL_AE_MODE、CONTROL_AE_LOCKのいずれかのパラメータを設定しましたか? – Mikhail

答えて

0

最近私は同じ問題を抱え、最終的に私を助けた解決策を見つけました。

私がする必要があったのは、アクティブセンサー矩形のエッジから1ピクセル分をステップすることでした。あなたの例では、代わりにこの矩形の:私はこの使用する

Rect newRect = new Rect(mActiveArraySize.left, 
         (int) (mActiveArraySize.height() * 0.25), 
         mActiveArraySize.right, 
         mActiveArraySize.bottom); 

Rect newRect = new Rect(mActiveArraySize.left + 1, 
         (int)(mActiveArraySize.height() * 0.25), 
         mActiveArraySize.right + 1, 
         mActiveArraySize.bottom - 2); 

をアクティブアレイのbotommost画素がmActiveArraySize.height() - 1であるので、私は底から2を減算し、Iは減算する必要がありますもう1ピクセル。

計量領域が使用android.scaler.cropRegionキャプチャ結果のメタデータで返さ外に、カメラデバイスは外のセクションを無視している場合は、多くのベンダーが不十分documentation

のこの部分を実装しているようです結果メタデータ内の測光領域として交差矩形のみを出力する。領域がクロップ領域の外部にある場合、その領域は無視され、結果メタデータには報告されません。

+0

ありがとう、私はそれを試して、サムスンのSDKを実装するために私の仕事を数週間節約したかもしれません... –

関連する問題