9

カメラ プレビュー内に四角形がオーバーレイされるカスタム Android カメラ アクティビティを構築してきました。写真がキャプチャされると (ボタンを押すと)、最終的な画像の対応する四角形領域を切り取りたいと考えています。問題は、Android がプレビュー画面を最終画像にどのようにマッピングするかがまだわかっていないことです。

次の式を試しましたが、一部のケースでしか機能しません。

x と y を、カメラ プレビューに表示されている長方形の左上隅の座標とします。

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

picture_width と picture_height を、カメラがサポートする最終的な画像の幅と高さとします。ここでは、これが 1632 * 1224 であるとします (Sony Ericsson XPERIA では、これは 2 MP に相当します)。

最終的な画像のトリミング矩形の x と y である x_map、y_map を見つけたいと思います。

次に、類推の規則により、使用した式は次のとおりです。

x_map = 画像の幅 * x / プレビューの幅; y_map = 画像の高さ * y / プレビューの高さ;

ただし、これはすべての場合に機能するとは限りません。携帯電話の画面サイズがプレビュー サイズに近い場合、この式はほとんど機能することがわかりました (ほぼ、多少の誤差はあります)。

ただし、Sony XPERIA 電話など、画面の寸法が幅: 480、高さ: 854 の場合、式は失敗します。

たとえば、x=50 の場合、x_map = 1632 * 50 / 1280 = 63.75 となります。ただし、この数値は、最終的な画像からトリミングされた四角形の領域が示すように、プレビュー領域の四角形と実際には対応していません。それは途方もないです。私たちの式は画面のサイズを考慮していませんが、画面のサイズを考慮して修正して実験を行った結果、望ましい結果は得られませんでした。

プレビュー サイズと最終的な画像の間のマッピングは何らかの形で画面のサイズを考慮に入れていると思われますが、それに関するドキュメントがなく、Web で回答を広範囲に検索した後、関連するものは何も出てこなかったため、正確な方法はわかりませんでした。数式が正常に機能するためには、類推の規則を適用する前に考慮する必要がある特定のスケール ファクターとアスペクト比があると考えています。

上記の正しい式を知っていますか?

4

1 に答える 1

1

まず、によって返される最大の画像サイズを取得しCamera.getSupportedPictureSizesます。これは、ネイティブの縦横比を決定できるカメラのネイティブ解像度です。縦横比が異なる画像サイズまたはプレビュー サイズは、'Matrix.ScaleToFit.CENTER' に従ってトリミングされます。

参照: https://stackoverflow.com/a/18159351/994834

于 2013-08-12T02:00:00.987 に答える