2013-03-22 16 views
8

カメラのプレビュー内に矩形が の上にオーバーレイされたカスタムAndroidカメラのアクティビティを作成しています(ボタンを押した ボタンで)最終画像の対応する矩形領域 。問題は、アンドロイド が最終画像にプレビュー画面をマップする方法をまだ理解していないことです。Androidカメラのプレビューから最終的な画像へのマッピング

我々は、以下の式を試みたが、唯一のいくつかのケースで動作している:

は、xとyはカメラプレビューに示す として矩形の左上隅の座標とします。

preview_widthとpreview_heightをカメラの幅と高さにします。 プレビューこれらは、getBestPreviewSize()関数を使用して取得します。この関数は、サポートされているプレビューサイズで をループし、より大きなものを選択します。 それらが1280と720であるとしましょう。

picture_widthとpicture_heightをカメラでサポートされている最終 画像の幅と高さとしましょう。私たちの目的のために、これが1632 * 1224(これは2 MPに対応するSony Ericsson XPERIA上で)とします。

最後の画像 のクロップ矩形のxとyであるx_map、y_mapを検索します。類似の規則によってそして

は、我々が使用される式は次の通りであった:

x_map = picture_width * X/preview_width。 y_map = picture_height * y/preview_height;

ただし、これはすべての場合に機能するとは限りません。 の電話機の画面のサイズがプレビューのサイズと似ている場合、この の式がほぼ機能していることがわかりました(おおよその誤差は小さい)。

ただし、画面サイズが幅:480 と高さ:854のSony XPERIA電話機の場合は、数式が失敗します。 * 1280分の50 X = 50、次いでx_map = 1632については、例えば

、= 63.75 しかし矩形領域で示すように、この数は、最終 ピクチャから切り取ら、実際に矩形に対応していませんプレビューエリア。それは です。私たちの公式では、画面の寸法、 を考慮していませんが、それを考慮して実験を修正しても、 は望ましい結果を生み出していません。

我々はそれにと幅広く上 答えを探して後にはドキュメントが存在しないので、プレビューサイズと、最終的な絵何とか との間のマッピングは、アカウントに、画面の大きさを取るが、正確にどのように考え出したていない、 と思われます関連するものは何もなかった。私たちは、 のスケールファクタとアスペクト比があると考えています。これは、公式ルールを適用する前に、 を考慮に入れる必要があります。

あなたは上記の正しい式を知っていますか?

答えて

1

最初に、Camera.getSupportedPictureSizesから返される最大の画像サイズを取得します。これは、ネイティブのアスペクト比を決定できるカメラのネイティブ解像度です。アスペクト比が異なる画像サイズやプレビューサイズは、 `Matrix.ScaleToFit.CENTER 'に従って切り取られます。

も参照してください。 https://stackoverflow.com/a/18159351/994834